001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.mina.core; 021 022import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 023import org.apache.mina.core.filterchain.IoFilter; 024import org.apache.mina.core.filterchain.IoFilterAdapter; 025import org.apache.mina.core.filterchain.IoFilterChain.Entry; 026import org.apache.mina.filter.util.NoopFilter; 027import org.junit.After; 028import org.junit.Before; 029import org.junit.Test; 030 031import static org.junit.Assert.assertEquals; 032import static org.junit.Assert.assertSame; 033 034/** 035 * Tests {@link DefaultIoFilterChainBuilder}. 036 * 037 * @author <a href="http://mina.apache.org">Apache MINA Project</a> 038 */ 039public class DefaultIoFilterChainBuilderTest { 040 @Before 041 public void setUp() throws Exception { 042 // Do nothing 043 } 044 045 @After 046 public void tearDown() throws Exception { 047 // Do nothing 048 } 049 050 @Test 051 public void testAdd() throws Exception { 052 DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder(); 053 054 builder.addFirst("A", new NoopFilter()); 055 builder.addLast("B", new NoopFilter()); 056 builder.addFirst("C", new NoopFilter()); 057 builder.addLast("D", new NoopFilter()); 058 builder.addBefore("B", "E", new NoopFilter()); 059 builder.addBefore("C", "F", new NoopFilter()); 060 builder.addAfter("B", "G", new NoopFilter()); 061 builder.addAfter("D", "H", new NoopFilter()); 062 063 String actual = ""; 064 for (Entry e : builder.getAll()) { 065 actual += e.getName(); 066 } 067 068 assertEquals("FCAEBGDH", actual); 069 } 070 071 @Test 072 public void testGet() throws Exception { 073 DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder(); 074 075 IoFilter filterA = new NoopFilter(); 076 IoFilter filterB = new NoopFilter(); 077 IoFilter filterC = new NoopFilter(); 078 IoFilter filterD = new NoopFilter(); 079 080 builder.addFirst("A", filterA); 081 builder.addLast("B", filterB); 082 builder.addBefore("B", "C", filterC); 083 builder.addAfter("A", "D", filterD); 084 085 assertSame(filterA, builder.get("A")); 086 assertSame(filterB, builder.get("B")); 087 assertSame(filterC, builder.get("C")); 088 assertSame(filterD, builder.get("D")); 089 } 090 091 @Test 092 public void testRemove() throws Exception { 093 DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder(); 094 095 builder.addLast("A", new NoopFilter()); 096 builder.addLast("B", new NoopFilter()); 097 builder.addLast("C", new NoopFilter()); 098 builder.addLast("D", new NoopFilter()); 099 builder.addLast("E", new NoopFilter()); 100 101 builder.remove("A"); 102 builder.remove("E"); 103 builder.remove("C"); 104 builder.remove("B"); 105 builder.remove("D"); 106 107 assertEquals(0, builder.getAll().size()); 108 } 109 110 @Test 111 public void testClear() throws Exception { 112 DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder(); 113 114 builder.addLast("A", new NoopFilter()); 115 builder.addLast("B", new NoopFilter()); 116 builder.addLast("C", new NoopFilter()); 117 builder.addLast("D", new NoopFilter()); 118 builder.addLast("E", new NoopFilter()); 119 120 builder.clear(); 121 122 assertEquals(0, builder.getAll().size()); 123 } 124 125 @Test 126 public void testToString() { 127 DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder(); 128 129 // When the chain is empty 130 assertEquals("{ empty }", builder.toString()); 131 132 // When there's one filter 133 builder.addLast("A", new IoFilterAdapter() { 134 @Override 135 public String toString() { 136 return "B"; 137 } 138 }); 139 assertEquals("{ (A:B) }", builder.toString()); 140 141 // When there are two 142 builder.addLast("C", new IoFilterAdapter() { 143 @Override 144 public String toString() { 145 return "D"; 146 } 147 }); 148 assertEquals("{ (A:B), (C:D) }", builder.toString()); 149 } 150}