| /* |
| * 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.logging.log4j.message; |
| |
| import org.junit.Test; |
| |
| import static org.junit.Assert.*; |
| |
| /** |
| * Tests the ReusableMessageFactory class. |
| */ |
| public class ReusableMessageFactoryTest { |
| |
| @Test |
| public void testCreateEventReturnsDifferentInstanceIfNotReleased() throws Exception { |
| final ReusableMessageFactory factory = new ReusableMessageFactory(); |
| final Message message1 = factory.newMessage("text, p0={} p1={} p2={} p3={}", 1, 2, 3, 4); |
| final Message message2 = factory.newMessage("text, p0={} p1={} p2={} p3={}", 9, 8, 7, 6); |
| assertNotSame(message1, message2); |
| ReusableMessageFactory.release(message1); |
| ReusableMessageFactory.release(message2); |
| } |
| |
| @Test |
| public void testCreateEventReturnsSameInstance() throws Exception { |
| final ReusableMessageFactory factory = new ReusableMessageFactory(); |
| final Message message1 = factory.newMessage("text, p0={} p1={} p2={} p3={}", 1, 2, 3, 4); |
| |
| ReusableMessageFactory.release(message1); |
| final Message message2 = factory.newMessage("text, p0={} p1={} p2={} p3={}", 9, 8, 7, 6); |
| assertSame(message1, message2); |
| |
| ReusableMessageFactory.release(message2); |
| final Message message3 = factory.newMessage("text, AAA={} BBB={} p2={} p3={}", 9, 8, 7, 6); |
| assertSame(message2, message3); |
| ReusableMessageFactory.release(message3); |
| } |
| |
| private void assertReusableParameterizeMessage(final Message message, final String txt, final Object[] params) { |
| assertTrue(message instanceof ReusableParameterizedMessage); |
| final ReusableParameterizedMessage msg = (ReusableParameterizedMessage) message; |
| assertTrue("reserved", msg.reserved); |
| |
| assertEquals(txt, msg.getFormat()); |
| assertEquals("count", msg.getParameterCount(), params.length); |
| final Object[] messageParams = msg.getParameters(); |
| for (int i = 0; i < params.length; i++) { |
| assertEquals(messageParams[i], params[i]); |
| } |
| } |
| |
| @Test |
| public void testCreateEventOverwritesFields() throws Exception { |
| final ReusableMessageFactory factory = new ReusableMessageFactory(); |
| final Message message1 = factory.newMessage("text, p0={} p1={} p2={} p3={}", 1, 2, 3, 4); |
| assertReusableParameterizeMessage(message1, "text, p0={} p1={} p2={} p3={}", new Object[]{ |
| new Integer(1), // |
| new Integer(2), // |
| new Integer(3), // |
| new Integer(4), // |
| }); |
| |
| ReusableMessageFactory.release(message1); |
| final Message message2 = factory.newMessage("other, A={} B={} C={} D={}", 1, 2, 3, 4); |
| assertReusableParameterizeMessage(message1, "other, A={} B={} C={} D={}", new Object[]{ |
| new Integer(1), // |
| new Integer(2), // |
| new Integer(3), // |
| new Integer(4), // |
| }); |
| assertSame(message1, message2); |
| ReusableMessageFactory.release(message2); |
| } |
| |
| @Test |
| public void testCreateEventReturnsThreadLocalInstance() throws Exception { |
| final ReusableMessageFactory factory = new ReusableMessageFactory(); |
| final Message[] message1 = new Message[1]; |
| final Message[] message2 = new Message[1]; |
| final Thread t1 = new Thread("THREAD 1") { |
| @Override |
| public void run() { |
| message1[0] = factory.newMessage("text, p0={} p1={} p2={} p3={}", 1, 2, 3, 4); |
| } |
| }; |
| final Thread t2 = new Thread("Thread 2") { |
| @Override |
| public void run() { |
| message2[0] = factory.newMessage("other, A={} B={} C={} D={}", 1, 2, 3, 4); |
| } |
| }; |
| t1.start(); |
| t2.start(); |
| t1.join(); |
| t2.join(); |
| assertNotNull(message1[0]); |
| assertNotNull(message2[0]); |
| assertNotSame(message1[0], message2[0]); |
| assertReusableParameterizeMessage(message1[0], "text, p0={} p1={} p2={} p3={}", new Object[]{ |
| new Integer(1), // |
| new Integer(2), // |
| new Integer(3), // |
| new Integer(4), // |
| }); |
| |
| assertReusableParameterizeMessage(message2[0], "other, A={} B={} C={} D={}", new Object[]{ |
| new Integer(1), // |
| new Integer(2), // |
| new Integer(3), // |
| new Integer(4), // |
| }); |
| ReusableMessageFactory.release(message1[0]); |
| ReusableMessageFactory.release(message2[0]); |
| } |
| |
| } |