View Javadoc

1   package com.atlassian.plugins.rest.module.servlet;
2   
3   import com.atlassian.plugin.servlet.ServletModuleManager;
4   import com.atlassian.plugin.servlet.descriptors.ServletFilterModuleDescriptor;
5   import com.atlassian.plugin.servlet.descriptors.ServletModuleDescriptor;
6   import com.atlassian.plugin.servlet.filter.FilterLocation;
7   import com.atlassian.plugin.servlet.util.PathMapper;
8   import com.atlassian.plugins.rest.module.ApiVersion;
9   import com.atlassian.plugins.rest.module.RestServletFilterModuleDescriptor;
10  import org.junit.Before;
11  import org.junit.Test;
12  
13  import static org.mockito.Mockito.*;
14  
15  import javax.servlet.FilterConfig;
16  import javax.servlet.ServletConfig;
17  import java.util.Collections;
18  
19  public class DefaultRestServletModuleManagerTest {
20      private ServletModuleManager servletModuleManagerDelegate;
21      private PathMapper pathMapper;
22  
23      private DefaultRestServletModuleManager servletModuleManager;
24  
25      @Before
26      public void setUp() {
27          servletModuleManagerDelegate = mock(ServletModuleManager.class);
28          pathMapper = mock(PathMapper.class);
29  
30          servletModuleManager = new DefaultRestServletModuleManager(servletModuleManagerDelegate, pathMapper, "/rest");
31      }
32  
33      @Test
34      public void testAddServletModule() {
35          final ServletModuleDescriptor moduleDescriptor = mock(ServletModuleDescriptor.class);
36          servletModuleManager.addServletModule(moduleDescriptor);
37  
38          verify(servletModuleManagerDelegate).addServletModule(moduleDescriptor);
39          verifyNoMoreInteractions(servletModuleManagerDelegate);
40          verifyZeroInteractions(pathMapper);
41      }
42  
43      @Test
44      public void testGetServlet() throws Exception {
45          final String path = "path";
46          final ServletConfig servletConfig = mock(ServletConfig.class);
47          servletModuleManager.getServlet(path, servletConfig);
48  
49          verify(servletModuleManagerDelegate).getServlet(path, servletConfig);
50          verifyNoMoreInteractions(servletModuleManagerDelegate);
51          verifyZeroInteractions(pathMapper);
52      }
53  
54      @Test
55      public void testRemoveServletModule() {
56          final ServletModuleDescriptor moduleDescriptor = mock(ServletModuleDescriptor.class);
57          servletModuleManager.removeServletModule(moduleDescriptor);
58  
59          verify(servletModuleManagerDelegate).removeServletModule(moduleDescriptor);
60          verifyNoMoreInteractions(servletModuleManagerDelegate);
61          verifyZeroInteractions(pathMapper);
62      }
63  
64      @Test
65      public void testGetFilters() throws Exception {
66          final FilterLocation filterLocation = FilterLocation.AFTER_ENCODING;
67          final String pathInfo = "pathInfo";
68          final FilterConfig filterConfig = mock(FilterConfig.class);
69          servletModuleManager.getFilters(filterLocation, pathInfo, filterConfig);
70  
71          verify(servletModuleManagerDelegate).getFilters(filterLocation, pathInfo, filterConfig);
72          verifyNoMoreInteractions(servletModuleManagerDelegate);
73          verifyZeroInteractions(pathMapper);
74      }
75  
76      @Test
77      public void testAddFilterModuleWithNonRestServletFilterModuleDescriptor() {
78          final ServletFilterModuleDescriptor servletFilterModuleDescriptor = mock(ServletFilterModuleDescriptor.class);
79          servletModuleManager.addFilterModule(servletFilterModuleDescriptor);
80  
81          verify(servletModuleManagerDelegate).addFilterModule(servletFilterModuleDescriptor);
82          verifyNoMoreInteractions(servletModuleManagerDelegate);
83          verifyZeroInteractions(pathMapper);
84      }
85  
86      @Test
87      public void testAddFilterModuleWithRestServletFilterModuleDescriptor() {
88          final String key1 = "completekey1";
89          final String basePath = "/basepath";
90          final String path1 = "/basepath/1";
91          final RestServletFilterModuleDescriptor servletFilterModuleDescriptor1 = getMockRestServletModuleDescriptor(key1, basePath, "1");
92          when(servletFilterModuleDescriptor1.getPaths()).thenReturn(Collections.singletonList(path1));
93  
94          // There is no latest yet, so this one should be added
95          servletModuleManager.addFilterModule(servletFilterModuleDescriptor1);
96  
97          verify(pathMapper).put(key1, servletModuleManager.getPathPattern(basePath));
98          verify(servletModuleManagerDelegate).addFilterModule(servletFilterModuleDescriptor1);
99  
100         final String key2 = "completekey2";
101         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor2 = getMockRestServletModuleDescriptor(key2, basePath, "2");
102 
103         // this version is greater than the current latest "completekey1", so should be set as latest
104         servletModuleManager.addFilterModule(servletFilterModuleDescriptor2);
105 
106         // reset the current latest
107         verify(pathMapper).put(key1, null);
108         verify(pathMapper).put(key1, path1);
109         // add the new latest
110         verify(pathMapper).put(key2, servletModuleManager.getPathPattern(basePath));
111         verify(servletModuleManagerDelegate).addFilterModule(servletFilterModuleDescriptor2);
112 
113         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor3 = getMockRestServletModuleDescriptor("completekey3", basePath, "1.2");
114 
115         // this version is lower than latest so should not be set as latest
116         servletModuleManager.addFilterModule(servletFilterModuleDescriptor3);
117 
118         verifyZeroInteractions(pathMapper);
119         verify(servletModuleManagerDelegate).addFilterModule(servletFilterModuleDescriptor3);
120     }
121 
122     @Test
123     public void testRemoveFilterModuleWithRestServletFilterModuleDescriptorWithNoExistingLatest() {
124         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor1 = getMockRestServletModuleDescriptor("completekey1", "/basepath", "1");
125 
126         // this is not the latest so far, as no descriptor has been set as the latest, so nothing special happening
127         servletModuleManager.removeFilterModule(servletFilterModuleDescriptor1);
128 
129         verify(servletModuleManagerDelegate).removeFilterModule(servletFilterModuleDescriptor1);
130         verifyZeroInteractions(pathMapper);
131     }
132 
133     @Test
134     public void testRemoveFilterModuleWithRestServletFilterModuleDescriptorWhenRemovingNonLatest() {
135         final String key1 = "completekey1";
136         final String key2 = "completekey2";
137         final String basePath = "/basepath";
138         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor1 = getMockRestServletModuleDescriptor(key1, basePath, "1");
139         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor2 = getMockRestServletModuleDescriptor(key2, basePath, "2");
140 
141         // adding the descriptor so that it becomes the latest
142         servletModuleManager.addFilterModule(servletFilterModuleDescriptor1);
143         servletModuleManager.addFilterModule(servletFilterModuleDescriptor2);
144 
145         // removing ths one shouldn't do much, this is not the "latest"
146         servletModuleManager.removeFilterModule(servletFilterModuleDescriptor1);
147 
148         verify(servletModuleManagerDelegate).removeFilterModule(servletFilterModuleDescriptor1);
149         verify(pathMapper).put(key1, servletModuleManager.getPathPattern(basePath));
150         verify(pathMapper).put(key1, null);
151         verify(pathMapper).put(key2, servletModuleManager.getPathPattern(basePath));
152         verifyNoMoreInteractions(pathMapper);
153     }
154 
155     @Test
156     public void testRemoveFilterModuleWithRestServletFilterModuleDescriptorWhenRemovingLatest() {
157         final String key1 = "completekey1";
158         final String key2 = "completekey2";
159         final String basePath = "/basepath";
160         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor1 = getMockRestServletModuleDescriptor(key1, basePath, "1");
161         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor2 = getMockRestServletModuleDescriptor(key2, basePath, "2");
162 
163         servletModuleManager.addFilterModule(servletFilterModuleDescriptor2);
164         servletModuleManager.addFilterModule(servletFilterModuleDescriptor1);
165 
166         verify(pathMapper).put(key2, servletModuleManager.getPathPattern(basePath));
167         verifyNoMoreInteractions(pathMapper);
168 
169         servletModuleManager.removeFilterModule(servletFilterModuleDescriptor2);
170 
171         verify(servletModuleManagerDelegate).removeFilterModule(servletFilterModuleDescriptor2);
172         verify(pathMapper).put(key1, servletModuleManager.getPathPattern(basePath));
173         verifyNoMoreInteractions(pathMapper);
174     }
175 
176     @Test
177     public void testRemoveFilterModuleWithNonRestServletFilterModuleDescriptor() {
178         final ServletFilterModuleDescriptor servletFilterModuleDescriptor = mock(ServletFilterModuleDescriptor.class);
179         servletModuleManager.removeFilterModule(servletFilterModuleDescriptor);
180 
181         verify(servletModuleManagerDelegate).removeFilterModule(servletFilterModuleDescriptor);
182         verifyNoMoreInteractions(servletModuleManagerDelegate);
183         verifyZeroInteractions(pathMapper);
184     }
185 
186     private RestServletFilterModuleDescriptor getMockRestServletModuleDescriptor(String key, String path, String version) {
187         final RestServletFilterModuleDescriptor servletFilterModuleDescriptor1 = mock(RestServletFilterModuleDescriptor.class);
188         when(servletFilterModuleDescriptor1.getCompleteKey()).thenReturn(key);
189         when(servletFilterModuleDescriptor1.getBasePath()).thenReturn(path);
190         when(servletFilterModuleDescriptor1.getVersion()).thenReturn(new ApiVersion(version));
191         return servletFilterModuleDescriptor1;
192     }
193 }