blob: 74b4d056a16fbc55dc607b7a7e6b72496d38230a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.dubbo.remoting.http.jetty;
import org.apache.dubbo.common.URL;
import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.support.FailsafeErrorTypeAwareLogger;
import org.apache.dubbo.common.url.component.ServiceConfigURL;
import org.apache.dubbo.common.utils.NetUtils;
import org.apache.dubbo.remoting.Constants;
import org.apache.dubbo.remoting.http.HttpHandler;
import org.apache.dubbo.remoting.http.HttpServer;
import org.apache.http.client.fluent.Request;
import org.eclipse.jetty.util.log.Log;
import org.junit.jupiter.api.Test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.*;
class JettyLoggerAdapterTest {
@Test
void testJettyUseDubboLogger() throws Exception {
int port = NetUtils.getAvailablePort();
URL url = new ServiceConfigURL(
"http", "localhost", port, new String[] {Constants.BIND_PORT_KEY, String.valueOf(port)});
HttpServer httpServer = new JettyHttpServer(url, new HttpHandler<HttpServletRequest, HttpServletResponse>() {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().write("Jetty is using Dubbo's logger");
}
});
Request.Get(url.toJavaURL().toURI()).execute().returnContent().asString();
assertThat(Log.getLog().getClass().isAssignableFrom(JettyLoggerAdapter.class), is(true));
httpServer.close();
}
@Test
void testSuccessLogger() throws Exception {
Logger successLogger = mock(Logger.class);
Class<?> clazz = Class.forName("org.apache.dubbo.remoting.http.jetty.JettyLoggerAdapter");
JettyLoggerAdapter jettyLoggerAdapter =
(JettyLoggerAdapter) clazz.getDeclaredConstructor().newInstance();
Field loggerField = clazz.getDeclaredField("logger");
loggerField.setAccessible(true);
loggerField.set(jettyLoggerAdapter, new FailsafeErrorTypeAwareLogger(successLogger));
jettyLoggerAdapter.setDebugEnabled(true);
when(successLogger.isDebugEnabled()).thenReturn(true);
when(successLogger.isWarnEnabled()).thenReturn(true);
when(successLogger.isInfoEnabled()).thenReturn(true);
jettyLoggerAdapter.warn("warn");
jettyLoggerAdapter.info("info");
jettyLoggerAdapter.debug("debug");
verify(successLogger).warn(anyString());
verify(successLogger).info(anyString());
verify(successLogger).debug(anyString());
jettyLoggerAdapter.warn(new Exception("warn"));
jettyLoggerAdapter.info(new Exception("info"));
jettyLoggerAdapter.debug(new Exception("debug"));
jettyLoggerAdapter.ignore(new Exception("ignore"));
jettyLoggerAdapter.warn("warn", new Exception("warn"));
jettyLoggerAdapter.info("info", new Exception("info"));
jettyLoggerAdapter.debug("debug", new Exception("debug"));
}
@Test
void testNewLogger() {
JettyLoggerAdapter loggerAdapter = new JettyLoggerAdapter();
org.eclipse.jetty.util.log.Logger logger =
loggerAdapter.newLogger(this.getClass().getName());
assertThat(logger.getClass().isAssignableFrom(JettyLoggerAdapter.class), is(true));
}
@Test
void testDebugEnabled() {
JettyLoggerAdapter loggerAdapter = new JettyLoggerAdapter();
loggerAdapter.setDebugEnabled(true);
assertThat(loggerAdapter.isDebugEnabled(), is(true));
}
@Test
void testLoggerFormat() throws Exception {
Class<?> clazz = Class.forName("org.apache.dubbo.remoting.http.jetty.JettyLoggerAdapter");
Object newInstance = clazz.getDeclaredConstructor().newInstance();
Method method = clazz.getDeclaredMethod("format", String.class, Object[].class);
method.setAccessible(true);
String print = (String) method.invoke(newInstance, "Hello,{}! I'am {}", new String[] {"World", "Jetty"});
assertThat(print, is("Hello,World! I'am Jetty"));
}
}