/* * **************************************************************************** * Cloud Foundry * Copyright (c) [2009-2016] Pivotal Software, Inc. All Rights Reserved. * * This product is licensed to you under the Apache License, Version 2.0 (the "License"). * You may not use this product except in compliance with the License. * * This product includes a number of subcomponents with * separate copyright notices and license terms. Your use of these * subcomponents is subject to the terms and conditions of the * subcomponent's license, as noted in the LICENSE file. * **************************************************************************** */ package org.cloudfoundry.identity.uaa.util.log; import org.apache.commons.logging.Log; import org.apache.log4j.Priority; import org.apache.log4j.helpers.SyslogQuietWriter; import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.spi.NOPLogger; import org.apache.log4j.spi.NOPLoggerRepository; import org.hamcrest.Matchers; import org.hamcrest.core.Every; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.util.Arrays; import java.util.stream.Collectors; import static org.hamcrest.Matchers.lessThan; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.mock; public class SyslogAppenderTest { private Log log; @Test public void testLargePacketHeaders() { SyslogAppender appender = new SyslogAppender(); appender.setFacility("USER"); appender.setThreshold(Priority.DEBUG); appender.setSyslogHost("localhost"); String packetHeader = "TEST HEADER: "; appender.setPacketHeader(packetHeader); char[] message = new char[3*1024]; Arrays.fill(message, 0, 1023, 'A'); Arrays.fill(message, 1024, 1023+1024, 'B'); Arrays.fill(message, 2048, 1023+2048, 'C'); SyslogQuietWriter writer = mock(SyslogQuietWriter.class); ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class); appender.sqw = writer; LoggingEvent event = new LoggingEvent( "org.apache.commons.logging.impl.Log4JLogger", new NOPLogger(new NOPLoggerRepository(), "name"), Priority.ERROR, new String(message), null); appender.append(event); Mockito.verify(writer, atLeast(4)).write(captor.capture()); assertThat(captor.getAllValues(), Every.everyItem(Matchers.startsWith(packetHeader))); assertThat(captor.getAllValues().stream().map(s -> s.length()).collect(Collectors.toList()), Every.everyItem(lessThan(1019))); // log = LogFactory.getLog(getClass()); // log.error(new String(message)); } }