View Javadoc
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  package org.apache.shiro.web.filter.mgt;
20  
21  import org.apache.shiro.util.CollectionUtils;
22  import org.apache.shiro.web.filter.authc.UserFilter;
23  import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;
24  import org.apache.shiro.web.filter.authz.PortFilter;
25  import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter;
26  import org.apache.shiro.web.filter.authz.SslFilter;
27  import org.junit.Test;
28  
29  import javax.servlet.Filter;
30  import javax.servlet.FilterChain;
31  import java.util.*;
32  
33  import static org.easymock.EasyMock.createNiceMock;
34  import static org.junit.Assert.*;
35  
36  /**
37   * Test case for the {@link SimpleNamedFilterList} implementation.
38   *
39   * @since 1.0
40   */
41  public class SimpleNamedFilterListTest {
42  
43      @Test
44      public void testNewInstance() {
45          @SuppressWarnings({"MismatchedQueryAndUpdateOfCollection"})
46          SimpleNamedFilterList list = new SimpleNamedFilterList("test");
47          assertNotNull(list.getName());
48          assertEquals("test", list.getName());
49      }
50  
51      @Test(expected = IllegalArgumentException.class)
52      public void testNewInstanceNameless() {
53          new SimpleNamedFilterList(null);
54      }
55  
56      @Test
57      public void testNewInstanceBackingList() {
58          new SimpleNamedFilterList("test", new ArrayList<Filter>());
59      }
60  
61      @Test(expected = NullPointerException.class)
62      public void testNewInstanceNullBackingList() {
63          new SimpleNamedFilterList("test", null);
64      }
65  
66      /**
67       * Exists mainly to increase code coverage as the SimpleNamedFilterList
68       * implementation is a direct pass through.
69       */
70      @Test
71      public void testListMethods() {
72          FilterChain mock = createNiceMock(FilterChain.class);
73          Filter filter = createNiceMock(Filter.class);
74  
75          NamedFilterList list = new SimpleNamedFilterList("test");
76          list.add(filter);
77          FilterChain chain = list.proxy(mock);
78          assertNotNull(chain);
79          assertNotSame(mock, chain);
80  
81          Filter singleFilter = new SslFilter();
82          List<? extends Filter> multipleFilters = CollectionUtils.asList(new PortFilter(), new UserFilter());
83  
84          list.add(0, singleFilter);
85          assertEquals(2, list.size());
86          assertTrue(list.get(0) instanceof SslFilter);
87          assertTrue(Arrays.equals(list.toArray(), new Object[]{singleFilter, filter}));
88  
89          list.addAll(multipleFilters);
90          assertEquals(4, list.size());
91          assertTrue(list.get(2) instanceof PortFilter);
92          assertTrue(list.get(3) instanceof UserFilter);
93  
94          list.addAll(0, CollectionUtils.asList(new PermissionsAuthorizationFilter(), new RolesAuthorizationFilter()));
95          assertEquals(6, list.size());
96          assertTrue(list.get(0) instanceof PermissionsAuthorizationFilter);
97          assertTrue(list.get(1) instanceof RolesAuthorizationFilter);
98          assertEquals(2, list.indexOf(singleFilter));
99          assertEquals(multipleFilters, list.subList(4, list.size()));
100 
101         assertTrue(list.contains(singleFilter));
102         assertTrue(list.containsAll(multipleFilters));
103 
104         assertFalse(list.isEmpty());
105         list.clear();
106         assertTrue(list.isEmpty());
107 
108         list.add(singleFilter);
109         Iterator i = list.iterator();
110         assertTrue(i.hasNext());
111         assertEquals(i.next(), singleFilter);
112 
113         ListIterator li = list.listIterator();
114         assertTrue(li.hasNext());
115         assertEquals(li.next(), singleFilter);
116 
117         li = list.listIterator(0);
118         assertTrue(li.hasNext());
119         assertEquals(li.next(), singleFilter);
120 
121         list.set(0, singleFilter);
122         assertEquals(list.get(0), singleFilter);
123 
124         Filter[] filters = new Filter[list.size()];
125         filters = list.toArray(filters);
126         assertEquals(1, filters.length);
127         assertEquals(filters[0], singleFilter);
128 
129         assertEquals(0, list.lastIndexOf(singleFilter));
130 
131         list.remove(singleFilter);
132         assertTrue(list.isEmpty());
133 
134         list.add(singleFilter);
135         list.remove(0);
136         assertTrue(list.isEmpty());
137 
138         list.add(singleFilter);
139         list.addAll(multipleFilters);
140         assertEquals(3, list.size());
141         list.removeAll(multipleFilters);
142         assertEquals(1, list.size());
143         assertEquals(list.get(0), singleFilter);
144 
145         list.addAll(multipleFilters);
146         assertEquals(3, list.size());
147         list.retainAll(multipleFilters);
148         assertEquals(2, list.size());
149         //noinspection unchecked
150         assertEquals(new ArrayList(list), multipleFilters);
151     }
152 
153 
154 }