1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.mina.core;
21  
22  import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
23  import org.apache.mina.core.filterchain.IoFilter;
24  import org.apache.mina.core.filterchain.IoFilterAdapter;
25  import org.apache.mina.core.filterchain.IoFilterChain.Entry;
26  import org.apache.mina.filter.util.NoopFilter;
27  import org.junit.After;
28  import org.junit.Before;
29  import org.junit.Test;
30  
31  import static org.junit.Assert.assertEquals;
32  import static org.junit.Assert.assertSame;
33  
34  /**
35   * Tests {@link DefaultIoFilterChainBuilder}.
36   *
37   * @author The Apache MINA Project (dev@mina.apache.org)
38   * @version $Rev$, $Date$
39   */
40  public class DefaultIoFilterChainBuilderTest {
41      @Before
42      public void setUp() throws Exception {
43      }
44  
45      @After
46      public void tearDown() throws Exception {
47      }
48  
49      @Test
50      public void testAdd() throws Exception {
51          DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
52  
53          builder.addFirst("A", new NoopFilter());
54          builder.addLast("B", new NoopFilter());
55          builder.addFirst("C", new NoopFilter());
56          builder.addLast("D", new NoopFilter());
57          builder.addBefore("B", "E", new NoopFilter());
58          builder.addBefore("C", "F", new NoopFilter());
59          builder.addAfter("B", "G", new NoopFilter());
60          builder.addAfter("D", "H", new NoopFilter());
61  
62          String actual = "";
63          for (Entry e : builder.getAll()) {
64              actual += e.getName();
65          }
66  
67          assertEquals("FCAEBGDH", actual);
68      }
69  
70      @Test
71      public void testGet() throws Exception {
72          DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
73  
74          IoFilter filterA = new NoopFilter();
75          IoFilter filterB = new NoopFilter();
76          IoFilter filterC = new NoopFilter();
77          IoFilter filterD = new NoopFilter();
78  
79          builder.addFirst("A", filterA);
80          builder.addLast("B", filterB);
81          builder.addBefore("B", "C", filterC);
82          builder.addAfter("A", "D", filterD);
83  
84          assertSame(filterA, builder.get("A"));
85          assertSame(filterB, builder.get("B"));
86          assertSame(filterC, builder.get("C"));
87          assertSame(filterD, builder.get("D"));
88      }
89  
90      @Test
91      public void testRemove() throws Exception {
92          DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
93  
94          builder.addLast("A", new NoopFilter());
95          builder.addLast("B", new NoopFilter());
96          builder.addLast("C", new NoopFilter());
97          builder.addLast("D", new NoopFilter());
98          builder.addLast("E", new NoopFilter());
99  
100         builder.remove("A");
101         builder.remove("E");
102         builder.remove("C");
103         builder.remove("B");
104         builder.remove("D");
105 
106         assertEquals(0, builder.getAll().size());
107     }
108 
109     @Test
110     public void testClear() throws Exception {
111         DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
112 
113         builder.addLast("A", new NoopFilter());
114         builder.addLast("B", new NoopFilter());
115         builder.addLast("C", new NoopFilter());
116         builder.addLast("D", new NoopFilter());
117         builder.addLast("E", new NoopFilter());
118 
119         builder.clear();
120 
121         assertEquals(0, builder.getAll().size());
122     }
123 
124     @Test
125     public void testToString() {
126         DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
127 
128         // When the chain is empty
129         assertEquals("{ empty }", builder.toString());
130 
131         // When there's one filter
132         builder.addLast("A", new IoFilterAdapter() {
133             @Override
134             public String toString() {
135                 return "B";
136             }
137         });
138         assertEquals("{ (A:B) }", builder.toString());
139 
140         // When there are two
141         builder.addLast("C", new IoFilterAdapter() {
142             @Override
143             public String toString() {
144                 return "D";
145             }
146         });
147         assertEquals("{ (A:B), (C:D) }", builder.toString());
148     }
149 }