blob: e310cf9a9d47335b05aa66ca00da01d7cbcdcafd [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.juneau.rest;
import static org.apache.juneau.rest.Enablement.*;
import static org.junit.Assert.*;
import static org.junit.runners.MethodSorters.*;
import java.util.logging.*;
import javax.servlet.http.*;
import org.apache.juneau.rest.mock2.*;
import org.junit.*;
@FixMethodOrder(NAME_ASCENDING)
public class RestCallLoggerConfig_Test {
private MockServletRequest req() {
return MockServletRequest.create();
}
private MockServletResponse res() {
return MockServletResponse.create();
}
private MockServletResponse res(int status) {
return MockServletResponse.create().status(status);
}
private RestCallLoggerConfig.Builder config() {
return RestCallLoggerConfig.create();
}
private RestCallLoggerConfig wrapped(RestCallLoggerConfig parent) {
return RestCallLoggerConfig.create().parent(parent).build();
}
private RestCallLoggerRule.Builder rule() {
return RestCallLoggerRule.create();
}
//------------------------------------------------------------------------------------------------------------------
// Basic matching
//------------------------------------------------------------------------------------------------------------------
@Test
public void a01_basicMatching_noRules() {
RestCallLoggerConfig lc = config().build();
RestCallLoggerConfig lcw = wrapped(lc);
HttpServletRequest req = req();
HttpServletResponse res = res();
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
}
@Test
public void a02_basicMatching_codeMatchingRule() {
RestCallLoggerConfig lc =
config()
.rules(
rule()
.codes("200")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res(200);
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
res.status(201);
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
}
@Test
public void a03_basicMatching_exceptionMatchingRule() {
RestCallLoggerConfig lc =
config()
.rule(
rule()
.exceptions("IndexOutOfBounds*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res();
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
req.attribute("Exception", new IndexOutOfBoundsException());
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
}
@Test
public void a04_basicMatching_debugMatching() {
RestCallLoggerConfig lc =
config()
.rule(
rule()
.exceptions("IndexOutOfBounds*")
.debugOnly()
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res();
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
req.attribute("Exception", new IndexOutOfBoundsException());
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
req.attribute("Debug", true);
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
}
//------------------------------------------------------------------------------------------------------------------
// Disabled
//------------------------------------------------------------------------------------------------------------------
@Test
public void b01_disabled() {
RestCallLoggerConfig lc =
config()
.disabled()
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res(200);
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
}
@Test
public void b02_disabled_true() {
RestCallLoggerConfig lc =
config()
.disabled(TRUE)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res(200);
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
}
@Test
public void b03_disabled_false() {
RestCallLoggerConfig lc =
config()
.disabled(FALSE)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res(200);
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
}
@Test
public void b04_disabled_null() {
RestCallLoggerConfig lc =
config()
.disabled(null)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res(200);
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
}
//------------------------------------------------------------------------------------------------------------------
// No-trace
//------------------------------------------------------------------------------------------------------------------
@Test
public void c01_noTraceAlways() {
RestCallLoggerConfig lc =
config()
.disabled(TRUE)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res();
assertNull(lc.getRule(req, res));
assertNull(lcw.getRule(req, res));
}
@Test
public void c02_noTrace_never() {
RestCallLoggerConfig lc =
config()
.disabled(FALSE)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res();
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
}
@Test
public void c03_noTrace_null() {
RestCallLoggerConfig lc =
config()
.disabled(null)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletResponse res = res();
assertNotNull(lc.getRule(req, res));
assertNotNull(lcw.getRule(req, res));
}
@Test
public void c04_noTrace_perRequest() {
RestCallLoggerConfig lc =
config()
.disabled(PER_REQUEST)
.rule(
rule()
.codes("*")
.build()
)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
MockServletRequest req = req();
MockServletRequest reqNoTrace = req().noTrace(true);
MockServletRequest reqNoTraceAttrTrue = req().attribute("NoTrace", true);
MockServletRequest reqNoTraceAttrFalse = req().attribute("NoTrace", false);
MockServletRequest reqNoTraceAttrOther = req().attribute("NoTrace", "foo");
MockServletResponse res = res();
assertNotNull(lc.getRule(req, res));
assertNull(lc.getRule(reqNoTrace, res));
assertNull(lc.getRule(reqNoTraceAttrTrue, res));
assertNotNull(lc.getRule(reqNoTraceAttrFalse, res));
assertNotNull(lc.getRule(reqNoTraceAttrOther, res));
assertNotNull(lcw.getRule(req, res));
assertNull(lcw.getRule(reqNoTrace, res));
assertNull(lcw.getRule(reqNoTraceAttrTrue, res));
assertNotNull(lcw.getRule(reqNoTraceAttrFalse, res));
assertNotNull(lcw.getRule(reqNoTraceAttrOther, res));
}
//------------------------------------------------------------------------------------------------------------------
// Use stack trace hashing
//------------------------------------------------------------------------------------------------------------------
@Test
public void d01_stackTraceHashing() {
RestCallLoggerConfig lc =
config()
.useStackTraceHashing()
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertTrue(lc.isUseStackTraceHashing());
assertTrue(lcw.isUseStackTraceHashing());
}
@Test
public void d02_stackTraceHashing_true() {
RestCallLoggerConfig lc =
config()
.useStackTraceHashing(true)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertTrue(lc.isUseStackTraceHashing());
assertTrue(lcw.isUseStackTraceHashing());
}
@Test
public void d03_stackTraceHashing_false() {
RestCallLoggerConfig lc =
config()
.useStackTraceHashing(false)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertFalse(lc.isUseStackTraceHashing());
assertFalse(lcw.isUseStackTraceHashing());
}
@Test
public void d04_stackTraceHashing_null() {
RestCallLoggerConfig lc =
config()
.useStackTraceHashing(null)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertFalse(lc.isUseStackTraceHashing());
assertFalse(lcw.isUseStackTraceHashing());
}
//------------------------------------------------------------------------------------------------------------------
// Stack trace hashing timeout
//------------------------------------------------------------------------------------------------------------------
@Test
public void e01_getStackTraceHashingTimeout() {
RestCallLoggerConfig lc =
config()
.stackTraceHashingTimeout(1)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertEquals(1, lc.getStackTraceHashingTimeout());
assertEquals(1, lcw.getStackTraceHashingTimeout());
}
@Test
public void e02_getStackTraceHashingTimeout_null() {
RestCallLoggerConfig lc =
config()
.stackTraceHashingTimeout(null)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertEquals(Integer.MAX_VALUE, lc.getStackTraceHashingTimeout());
assertEquals(Integer.MAX_VALUE, lcw.getStackTraceHashingTimeout());
}
//------------------------------------------------------------------------------------------------------------------
// Level
//------------------------------------------------------------------------------------------------------------------
@Test
public void f01_level_default() {
RestCallLoggerConfig lc =
config()
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertEquals(Level.INFO, lc.getLevel());
assertEquals(Level.INFO, lcw.getLevel());
}
@Test
public void f02_level_warningLevel() {
RestCallLoggerConfig lc =
config()
.level(Level.WARNING)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertEquals(Level.WARNING, lc.getLevel());
assertEquals(Level.WARNING, lcw.getLevel());
}
@Test
public void f03_level_nullLevel() {
RestCallLoggerConfig lc =
config()
.level(null)
.build();
RestCallLoggerConfig lcw = wrapped(lc);
assertEquals(Level.INFO, lc.getLevel());
assertEquals(Level.INFO, lcw.getLevel());
}
}