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.common;
21  
22  import junit.framework.Assert;
23  import junit.framework.TestCase;
24  
25  import org.apache.mina.common.IoFilterChain.Entry;
26  
27  /**
28   * Tests {@link DefaultIoFilterChainBuilder}.
29   *
30   * @author The Apache MINA Project (dev@mina.apache.org)
31   * @version $Rev$, $Date$
32   */
33  public class DefaultIoFilterChainBuilderTest extends TestCase {
34      public static void main(String[] args) {
35          junit.textui.TestRunner.run(DefaultIoFilterChainBuilderTest.class);
36      }
37  
38      @Override
39      protected void setUp() throws Exception {
40      }
41  
42      @Override
43      protected void tearDown() throws Exception {
44      }
45  
46      public void testAdd() throws Exception {
47          DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
48  
49          builder.addFirst("A", new IoFilterAdapter());
50          builder.addLast("B", new IoFilterAdapter());
51          builder.addFirst("C", new IoFilterAdapter());
52          builder.addLast("D", new IoFilterAdapter());
53          builder.addBefore("B", "E", new IoFilterAdapter());
54          builder.addBefore("C", "F", new IoFilterAdapter());
55          builder.addAfter("B", "G", new IoFilterAdapter());
56          builder.addAfter("D", "H", new IoFilterAdapter());
57  
58          String actual = "";
59          for (Entry e : builder.getAll()) {
60              actual += e.getName();
61          }
62  
63          Assert.assertEquals("FCAEBGDH", actual);
64      }
65  
66      public void testGet() throws Exception {
67          DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
68  
69          IoFilter filterA = new IoFilterAdapter();
70          IoFilter filterB = new IoFilterAdapter();
71          IoFilter filterC = new IoFilterAdapter();
72          IoFilter filterD = new IoFilterAdapter();
73  
74          builder.addFirst("A", filterA);
75          builder.addLast("B", filterB);
76          builder.addBefore("B", "C", filterC);
77          builder.addAfter("A", "D", filterD);
78  
79          Assert.assertSame(filterA, builder.get("A"));
80          Assert.assertSame(filterB, builder.get("B"));
81          Assert.assertSame(filterC, builder.get("C"));
82          Assert.assertSame(filterD, builder.get("D"));
83      }
84  
85      public void testRemove() throws Exception {
86          DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
87  
88          builder.addLast("A", new IoFilterAdapter());
89          builder.addLast("B", new IoFilterAdapter());
90          builder.addLast("C", new IoFilterAdapter());
91          builder.addLast("D", new IoFilterAdapter());
92          builder.addLast("E", new IoFilterAdapter());
93  
94          builder.remove("A");
95          builder.remove("E");
96          builder.remove("C");
97          builder.remove("B");
98          builder.remove("D");
99  
100         Assert.assertEquals(0, builder.getAll().size());
101     }
102 
103     public void testClear() throws Exception {
104         DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
105 
106         builder.addLast("A", new IoFilterAdapter());
107         builder.addLast("B", new IoFilterAdapter());
108         builder.addLast("C", new IoFilterAdapter());
109         builder.addLast("D", new IoFilterAdapter());
110         builder.addLast("E", new IoFilterAdapter());
111 
112         builder.clear();
113 
114         Assert.assertEquals(0, builder.getAll().size());
115     }
116 
117     public void testToString() {
118         DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
119 
120         // When the chain is empty
121         Assert.assertEquals("{ empty }", builder.toString());
122 
123         // When there's one filter
124         builder.addLast("A", new IoFilterAdapter() {
125             @Override
126             public String toString() {
127                 return "B";
128             }
129         });
130         Assert.assertEquals("{ (A:B) }", builder.toString());
131 
132         // When there are two
133         builder.addLast("C", new IoFilterAdapter() {
134             @Override
135             public String toString() {
136                 return "D";
137             }
138         });
139         Assert.assertEquals("{ (A:B), (C:D) }", builder.toString());
140     }
141 }