View Javadoc

1   /*
2    * $Id: DefaultHttpHeadersTest.java 651946 2008-04-27 13:41:38Z apetrelli $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  package org.apache.struts2.rest;
23  
24  import junit.framework.TestCase;
25  import org.springframework.mock.web.MockHttpServletRequest;
26  import org.springframework.mock.web.MockHttpServletResponse;
27  
28  import static javax.servlet.http.HttpServletResponse.*;
29  import java.util.Date;
30  
31  public class DefaultHttpHeadersTest extends TestCase {
32      private MockHttpServletResponse mockResponse;
33      private MockHttpServletRequest mockRequest;
34  
35      @Override
36      public void setUp() {
37          mockResponse = new MockHttpServletResponse();
38          mockRequest = new MockHttpServletRequest();
39      }
40  
41      @Override
42      public void tearDown() {
43          mockRequest = null;
44          mockRequest = null;
45      }
46  
47      public void testApply() {
48          Date now = new Date();
49          DefaultHttpHeaders headers = new DefaultHttpHeaders()
50                  .lastModified(now)
51                  .withStatus(SC_OK)
52                  .setLocationId("44")
53                  .withETag("asdf");
54          mockRequest.setRequestURI("/foo/bar.xhtml");
55  
56          headers.apply(mockRequest, mockResponse, new Object());
57  
58          assertEquals(SC_CREATED, mockResponse.getStatus());
59          assertEquals("http://localhost:80/foo/bar/44.xhtml", mockResponse.getHeader("Location"));
60          assertEquals("asdf", mockResponse.getHeader("ETag"));
61          assertEquals(now.getTime(), mockResponse.getHeader("Last-Modified"));
62  
63      }
64  
65      public void testApplyNoLocationExtension() {
66          DefaultHttpHeaders headers = new DefaultHttpHeaders()
67                  .setLocationId("44");
68          mockRequest.setRequestURI("/foo/bar");
69  
70          headers.apply(mockRequest, mockResponse, new Object());
71          assertEquals("http://localhost:80/foo/bar/44", mockResponse.getHeader("Location"));
72          assertEquals(SC_CREATED, mockResponse.getStatus());
73      }
74  
75      public void testApplyFullLocation() {
76          DefaultHttpHeaders headers = new DefaultHttpHeaders()
77                  .setLocation("http://localhost/bar/44");
78          mockRequest.setRequestURI("/foo/bar");
79  
80          headers.apply(mockRequest, mockResponse, new Object());
81          assertEquals("http://localhost/bar/44", mockResponse.getHeader("Location"));
82          assertEquals(SC_CREATED, mockResponse.getStatus());
83  
84      }
85  
86      public void testAutoETag() {
87          DefaultHttpHeaders headers = new DefaultHttpHeaders();
88          headers.apply(mockRequest, mockResponse, new Object() {
89              @Override
90              public int hashCode() {
91                  return 123;
92              }
93          });
94  
95          assertEquals("123", mockResponse.getHeader("ETag"));
96      }
97  
98      public void testNoCache() {
99          DefaultHttpHeaders headers = new DefaultHttpHeaders()
100                 .disableCaching();
101         headers.apply(mockRequest, mockResponse, new Object());
102 
103         assertEquals("no-cache", mockResponse.getHeader("Cache-Control"));
104     }
105 
106     public void testConditionalGetForJustETag() {
107         DefaultHttpHeaders headers = new DefaultHttpHeaders()
108                 .withETag("asdf");
109         mockRequest.addHeader("If-None-Match", "asdf");
110         headers.apply(mockRequest, mockResponse, new Object());
111 
112         assertEquals(SC_NOT_MODIFIED, mockResponse.getStatus());
113         assertEquals("asdf", mockResponse.getHeader("ETag"));
114     }
115 
116     public void testConditionalGetForJustETagNotOK() {
117         DefaultHttpHeaders headers = new DefaultHttpHeaders()
118                 .withETag("asdf")
119                 .withStatus(SC_BAD_REQUEST);
120         mockRequest.addHeader("If-None-Match", "asdf");
121         headers.apply(mockRequest, mockResponse, new Object());
122 
123         assertEquals(SC_BAD_REQUEST, mockResponse.getStatus());
124         assertEquals("asdf", mockResponse.getHeader("ETag"));
125     }
126 
127     public void testConditionalGetForJustLastModified() {
128         Date now = new Date();
129         DefaultHttpHeaders headers = new DefaultHttpHeaders()
130                 .lastModified(now);
131         mockRequest.addHeader("If-Modified-Since", String.valueOf(now.getTime()));
132         headers.apply(mockRequest, mockResponse, new Object());
133 
134         assertEquals(SC_NOT_MODIFIED, mockResponse.getStatus());
135     }
136 
137     public void testConditionalGetForJustLastModifiedDifferent() {
138         Date now = new Date();
139         DefaultHttpHeaders headers = new DefaultHttpHeaders()
140                 .lastModified(now);
141         mockRequest.addHeader("If-Modified-Since", String.valueOf(new Date(2323L).getTime()));
142         headers.apply(mockRequest, mockResponse, new Object());
143 
144         assertEquals(SC_OK, mockResponse.getStatus());
145     }
146 
147     public void testConditionalGetForLastModifiedAndETag() {
148         Date now = new Date();
149         DefaultHttpHeaders headers = new DefaultHttpHeaders()
150                 .lastModified(now)
151                 .withETag("asdf");
152         mockRequest.addHeader("If-None-Match", "asdf");
153         mockRequest.addHeader("If-Modified-Since", String.valueOf(now.getTime()));
154         headers.apply(mockRequest, mockResponse, new Object());
155 
156         assertEquals(SC_NOT_MODIFIED, mockResponse.getStatus());
157     }
158 
159     public void testConditionalGetForLastModifiedAndETagButNoCache() {
160         Date now = new Date();
161         DefaultHttpHeaders headers = new DefaultHttpHeaders()
162                 .lastModified(now)
163                 .withETag("asdf")
164                 .disableCaching();
165         mockRequest.addHeader("If-None-Match", "asdf");
166         mockRequest.addHeader("If-Modified-Since", String.valueOf(now.getTime()));
167         headers.apply(mockRequest, mockResponse, new Object());
168 
169         assertEquals(SC_OK, mockResponse.getStatus());
170     }
171 
172     public void testConditionalGetForLastModifiedAndETagWithBadETag() {
173         Date now = new Date();
174         DefaultHttpHeaders headers = new DefaultHttpHeaders()
175                 .lastModified(now)
176                 .withETag("fdsa");
177         mockRequest.addHeader("If-None-Match", "asdfds");
178         mockRequest.addHeader("If-Modified-Since", String.valueOf(now.getTime()));
179         headers.apply(mockRequest, mockResponse, new Object());
180 
181         assertEquals(SC_OK, mockResponse.getStatus());
182     }
183 }