blob: 58ac9ea4e7de765988a96d5a7d1a9e1733af13e6 [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.logging.log4j.core.config;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.test.appender.FailOnceAppender;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
/**
* Tests the AppenderControlArraySet class..
*/
public class AppenderControlArraySetTest {
@Test
public void testInitiallyEmpty() throws Exception {
assertTrue(new AppenderControlArraySet().isEmpty());
assertTrue(new AppenderControlArraySet().get().length == 0);
}
private AppenderControl createControl(final String name) {
final Appender appender = FailOnceAppender.createAppender(name);
return new AppenderControl(appender, Level.INFO, null);
}
@Test
public void testAddMakesNonEmpty() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
assertTrue(set.isEmpty());
set.add(createControl("A"));
assertFalse(set.isEmpty());
}
@Test
public void testAddReturnsTrueIfSuccessfullyAdded() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
assertTrue(set.add(createControl("A")));
assertTrue(set.add(createControl("B")));
assertTrue(set.add(createControl("C")));
}
@Test
public void testAddDoesNotAppendersWithSameName() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
final AppenderControl[] controls = new AppenderControl[] {createControl("A"), createControl("B"),
createControl("B"), createControl("B"), createControl("A")};
for (final AppenderControl ctl : controls) {
set.add(ctl);
}
assertEquals(2, set.get().length);
assertSame(controls[0], set.get()[0]);
assertSame(controls[1], set.get()[1]);
}
@Test
public void testAddReturnsFalseIfAlreadyInSet() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
assertTrue(set.add(createControl("A")));
assertTrue(set.add(createControl("B")));
assertFalse(set.add(createControl("B")));
assertFalse(set.add(createControl("B")));
assertFalse(set.add(createControl("A")));
assertEquals(2, set.get().length);
}
@Test
public void testRemoveRemovesItemFromSet() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
set.add(createControl("A"));
set.add(createControl("B"));
set.add(createControl("C"));
set.add(createControl("D"));
assertEquals(4, set.get().length);
set.remove("B");
assertEquals(3, set.get().length);
final AppenderControl[] three = set.get();
assertEquals("A", three[0].getAppenderName());
assertEquals("C", three[1].getAppenderName());
assertEquals("D", three[2].getAppenderName());
set.remove("C");
assertEquals(2, set.get().length);
final AppenderControl[] two = set.get();
assertEquals("A", two[0].getAppenderName());
assertEquals("D", two[1].getAppenderName());
set.remove("A");
assertEquals(1, set.get().length);
final AppenderControl[] one = set.get();
assertEquals("D", one[0].getAppenderName());
set.remove("D");
assertTrue(set.isEmpty());
}
@Test
public void testRemoveReturnsRemovedItem() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
final AppenderControl[] controls = new AppenderControl[] {createControl("A"), createControl("B"),
createControl("C"), createControl("D")};
for (final AppenderControl ctl : controls) {
set.add(ctl);
}
assertEquals(controls.length, set.get().length);
final AppenderControl b = set.remove("B");
assertSame(controls[1], b);
final AppenderControl c = set.remove("C");
assertSame(controls[2], c);
}
@Test
public void testAsMap() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
final AppenderControl[] controls = new AppenderControl[] {createControl("A"), createControl("B"),
createControl("C"), createControl("D")};
for (final AppenderControl ctl : controls) {
set.add(ctl);
}
final Map<String, Appender> expected = new HashMap<>();
for (final AppenderControl ctl : controls) {
expected.put(ctl.getAppenderName(), ctl.getAppender());
}
assertEquals(expected, set.asMap());
}
@Test
public void testClearRemovesAllItems() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
set.add(createControl("A"));
set.add(createControl("B"));
set.add(createControl("C"));
assertFalse(set.isEmpty());
set.clear();
assertTrue(set.isEmpty());
}
@Test
public void testClearReturnsAllItems() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
final AppenderControl[] controls = new AppenderControl[] {createControl("A"), createControl("B"),
createControl("C")};
for (final AppenderControl ctl : controls) {
set.add(ctl);
}
assertEquals(3, set.get().length);
final AppenderControl[] previous = set.clear();
assertArrayEquals(previous, controls);
}
@Test
public void testIsEmptyMeansZeroLengthArray() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
assertTrue(set.isEmpty());
assertTrue(set.get().length == 0);
}
@Test
public void testGetReturnsAddedItems() throws Exception {
final AppenderControlArraySet set = new AppenderControlArraySet();
final AppenderControl[] controls = new AppenderControl[] {createControl("A"), createControl("B"),
createControl("C")};
for (final AppenderControl ctl : controls) {
set.add(ctl);
}
assertEquals(3, set.get().length);
assertArrayEquals(controls, set.get());
}
}