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