blob: 1f446efef0f7ada4ac013c9381abfe6c9e76cc17 [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.junit.Assert.*;
import static org.junit.runners.MethodSorters.*;
import java.util.logging.*;
import org.apache.juneau.json.*;
import org.apache.juneau.parser.*;
import org.junit.*;
@FixMethodOrder(NAME_ASCENDING)
public class RestCallLoggerRule_Test {
static final Throwable T1 = new IndexOutOfBoundsException();
static final Throwable T2 = new NoSuchMethodError();
//------------------------------------------------------------------------------------------------------------------
// Status code matching
//------------------------------------------------------------------------------------------------------------------
@Test
public void a01_matchingCodes_ignoreOtherFields() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes("200").build();
assertTrue(r.matches(200, true, null));
assertTrue(r.matches(200, false, null));
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(201, true, null));
assertFalse(r.matches(199, true, null));
assertFalse(r.matches(201, false, null));
assertFalse(r.matches(199, false, null));
}
@Test
public void a02_matchingCodes_singleValue() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes("200").build();
assertTrue(r.matches(200, true, null));
assertFalse(r.matches(201, true, null));
assertFalse(r.matches(199, true, null));
}
@Test
public void a03_matchingCodes_range() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes("200-299").build();
assertTrue(r.matches(200, true, null));
assertTrue(r.matches(201, true, null));
assertTrue(r.matches(299, true, null));
assertFalse(r.matches(199, true, null));
assertFalse(r.matches(300, true, null));
}
@Test
public void a04_matchingCodes_openEnded() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes(">=200").build();
assertTrue(r.matches(200, true, null));
assertTrue(r.matches(201, true, null));
assertTrue(r.matches(299, true, null));
assertTrue(r.matches(300, true, null));
assertFalse(r.matches(199, true, null));
}
@Test
public void a05_matchingCodes_matchAll() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes("*").build();
assertTrue(r.matches(200, true, null));
}
@Test
public void a06_matchingCodes_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes(null).build();
assertTrue(r.matches(200, true, null));
}
@Test
public void a07_matchingCodes_empty() {
RestCallLoggerRule r = RestCallLoggerRule.create().codes("").build();
assertTrue(r.matches(200, true, null));
}
//------------------------------------------------------------------------------------------------------------------
// Exception matching
//------------------------------------------------------------------------------------------------------------------
@Test
public void b01_matchingException_ignoreOtherFields() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions("IndexOutOfBoundsException").build();
assertTrue(r.matches(200, true, T1));
assertTrue(r.matches(200, false, T1));
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(201, true, null));
assertFalse(r.matches(199, true, null));
assertFalse(r.matches(201, false, null));
assertFalse(r.matches(199, false, null));
}
@Test
public void b02_matchingException_simpleClassName() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions("IndexOutOfBoundsException").build();
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(200, true, T2));
}
@Test
public void b03_matchingException_fullClassName() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions("java.lang.IndexOutOfBoundsException").build();
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(200, true, T2));
}
@Test
public void b04_matchingException_simpleClassName_pattern() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions("IndexOutOfBounds*").build();
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(200, true, T2));
}
@Test
public void b05_matchingException_fullClassName_pattern() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions("java.lang.IndexOutOfBounds*").build();
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(200, true, T2));
}
@Test
public void b06_matchingException_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions(null).build();
assertTrue(r.matches(200, true, null));
assertTrue(r.matches(201, false, T1));
}
@Test
public void b07_matchingException_empty() {
RestCallLoggerRule r = RestCallLoggerRule.create().exceptions("").build();
assertTrue(r.matches(200, true, null));
assertTrue(r.matches(201, false, T1));
}
//------------------------------------------------------------------------------------------------------------------
// Debug-only matching
//------------------------------------------------------------------------------------------------------------------
@Test
public void c01_debugOnly_true() {
RestCallLoggerRule r = RestCallLoggerRule.create().debugOnly().build();
assertTrue(r.matches(200, true, T1));
assertFalse(r.matches(200, false, T1));
}
@Test
public void c02_debugOnly_false() {
RestCallLoggerRule r = RestCallLoggerRule.create().debugOnly(false).build();
assertTrue(r.matches(200, true, T1));
assertTrue(r.matches(200, false, T1));
}
@Test
public void c03_debugOnly_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().debugOnly(null).build();
assertTrue(r.matches(200, true, T1));
assertTrue(r.matches(200, false, T1));
}
@Test
public void c04_debugOnly_default() {
RestCallLoggerRule r = RestCallLoggerRule.create().debugOnly(null).build();
assertTrue(r.matches(200, true, T1));
assertTrue(r.matches(200, false, T1));
}
//------------------------------------------------------------------------------------------------------------------
// Level
//------------------------------------------------------------------------------------------------------------------
@Test
public void d01_level() {
RestCallLoggerRule r = RestCallLoggerRule.create().level(Level.WARNING).build();
assertEquals(Level.WARNING, r.getLevel());
}
@Test
public void d02_level_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().level(null).build();
assertNull(r.getLevel());
}
@Test
public void d03_level_default() {
RestCallLoggerRule r = RestCallLoggerRule.create().build();
assertNull(r.getLevel());
}
//------------------------------------------------------------------------------------------------------------------
// Request detail
//------------------------------------------------------------------------------------------------------------------
@Test
public void e01_reqDetail_small() {
RestCallLoggerRule r = RestCallLoggerRule.create().req(RestCallLoggingDetail.SHORT).build();
assertEquals(RestCallLoggingDetail.SHORT, r.getReqDetail());
}
@Test
public void e02_reqDetail_medium() {
RestCallLoggerRule r = RestCallLoggerRule.create().req(RestCallLoggingDetail.MEDIUM).build();
assertEquals(RestCallLoggingDetail.MEDIUM, r.getReqDetail());
}
@Test
public void e03_reqDetail_large() {
RestCallLoggerRule r = RestCallLoggerRule.create().req(RestCallLoggingDetail.LONG).build();
assertEquals(RestCallLoggingDetail.LONG, r.getReqDetail());
}
@Test
public void e05_reqDetail_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().req(null).build();
assertEquals(RestCallLoggingDetail.SHORT, r.getReqDetail());
}
@Test
public void e06_reqDetail_default() {
RestCallLoggerRule r = RestCallLoggerRule.create().build();
assertEquals(RestCallLoggingDetail.SHORT, r.getReqDetail());
}
//------------------------------------------------------------------------------------------------------------------
// Response detail
//------------------------------------------------------------------------------------------------------------------
@Test
public void f01_resDetail_small() {
RestCallLoggerRule r = RestCallLoggerRule.create().res(RestCallLoggingDetail.SHORT).build();
assertEquals(RestCallLoggingDetail.SHORT, r.getResDetail());
}
@Test
public void f02_resDetail_medium() {
RestCallLoggerRule r = RestCallLoggerRule.create().res(RestCallLoggingDetail.MEDIUM).build();
assertEquals(RestCallLoggingDetail.MEDIUM, r.getResDetail());
}
@Test
public void f03_resDetail_large() {
RestCallLoggerRule r = RestCallLoggerRule.create().res(RestCallLoggingDetail.LONG).build();
assertEquals(RestCallLoggingDetail.LONG, r.getResDetail());
}
@Test
public void f05_resDetail_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().res(null).build();
assertEquals(RestCallLoggingDetail.SHORT, r.getResDetail());
}
@Test
public void f06_resDetail_default() {
RestCallLoggerRule r = RestCallLoggerRule.create().build();
assertEquals(RestCallLoggingDetail.SHORT, r.getResDetail());
}
//------------------------------------------------------------------------------------------------------------------
// Verbose
//------------------------------------------------------------------------------------------------------------------
@Test
public void f01_verbose_true() {
RestCallLoggerRule r = RestCallLoggerRule.create().verbose().build();
assertEquals(RestCallLoggingDetail.LONG, r.getReqDetail());
assertEquals(RestCallLoggingDetail.LONG, r.getResDetail());
}
@Test
public void f02_verbose_false() {
RestCallLoggerRule r = RestCallLoggerRule.create().verbose(false).build();
assertEquals(RestCallLoggingDetail.SHORT, r.getReqDetail());
assertEquals(RestCallLoggingDetail.SHORT, r.getResDetail());
}
@Test
public void f03_verbose_null() {
RestCallLoggerRule r = RestCallLoggerRule.create().verbose(null).build();
assertEquals(RestCallLoggingDetail.SHORT, r.getReqDetail());
assertEquals(RestCallLoggingDetail.SHORT, r.getResDetail());
}
@Test
public void f04_verbose_true_override() {
RestCallLoggerRule r = RestCallLoggerRule.create().verbose(true).req(RestCallLoggingDetail.SHORT).res(RestCallLoggingDetail.SHORT).build();
assertEquals(RestCallLoggingDetail.LONG, r.getReqDetail());
assertEquals(RestCallLoggingDetail.LONG, r.getResDetail());
}
//------------------------------------------------------------------------------------------------------------------
// Bean instantiation
//------------------------------------------------------------------------------------------------------------------
@Test
public void g01_beanInstantiation_defaultValues() throws ParseException {
RestCallLoggerRule r = JsonParser.DEFAULT.parse("{}", RestCallLoggerRule.class);
assertEquals("{}", r.toString());
}
@Test
public void g02_beanInstantiation_allValues() throws ParseException {
RestCallLoggerRule r = JsonParser.DEFAULT.parse("{codes:'100-200',exceptions:'Foo*',level:'WARNING',req:'LONG',res:'LONG',debugOnly:'true'}", RestCallLoggerRule.class);
assertEquals("{codes:'100-200',exceptions:'Foo*',debugOnly:true,level:'WARNING',req:'LONG',res:'LONG'}", r.toString());
}
}