View Javadoc

1   /**
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  package org.apache.hadoop.hbase.rest;
20  
21  import static org.junit.Assert.assertEquals;
22  import static org.junit.Assert.assertNotNull;
23  import static org.mockito.Mockito.mock;
24  import static org.mockito.Mockito.never;
25  import static org.mockito.Mockito.verify;
26  import static org.mockito.Mockito.when;
27  
28  import java.io.IOException;
29  
30  import javax.servlet.ServletOutputStream;
31  import javax.servlet.http.HttpServletResponse;
32  
33  import org.apache.hadoop.hbase.testclassification.SmallTests;
34  import org.apache.hadoop.hbase.rest.filter.GZIPResponseStream;
35  import org.apache.hadoop.hbase.rest.filter.GZIPResponseWrapper;
36  import org.junit.Test;
37  import org.junit.experimental.categories.Category;
38  
39  @Category(SmallTests.class)
40  public class TestGZIPResponseWrapper {
41  
42    private final HttpServletResponse response = mock(HttpServletResponse.class);
43    private final GZIPResponseWrapper wrapper = new GZIPResponseWrapper(response);
44    
45    /**
46     * wrapper should set all headers except "content-length"
47     */
48    @Test
49    public void testHeader() throws IOException {
50      wrapper.setStatus(200);
51      verify(response).setStatus(200);
52      wrapper.addHeader("header", "header value");
53      verify(response).addHeader("header", "header value");
54      wrapper.addHeader("content-length", "header value2");
55      verify(response, never()).addHeader("content-length", "header value");
56  
57      wrapper.setIntHeader("header", 5);
58      verify(response).setIntHeader("header", 5);
59      wrapper.setIntHeader("content-length", 4);
60      verify(response, never()).setIntHeader("content-length", 4);
61  
62      wrapper.setHeader("set-header", "new value");
63      verify(response).setHeader("set-header", "new value");
64      wrapper.setHeader("content-length", "content length value");
65      verify(response, never()).setHeader("content-length", "content length value");
66  
67      wrapper.sendRedirect("location");
68      verify(response).sendRedirect("location");
69      
70      wrapper.flushBuffer();
71      verify(response).flushBuffer();
72    }
73  
74    @Test
75    public void testResetBuffer() throws IOException {
76      when(response.isCommitted()).thenReturn(false);
77      ServletOutputStream out = mock(ServletOutputStream.class);
78      when(response.getOutputStream()).thenReturn(out);
79  
80      ServletOutputStream servletOutput = wrapper.getOutputStream();
81      assertEquals(GZIPResponseStream.class, servletOutput.getClass());
82      wrapper.resetBuffer();
83      verify(response).setHeader("Content-Encoding", null);
84  
85      when(response.isCommitted()).thenReturn(true);
86      servletOutput = wrapper.getOutputStream();
87      assertEquals(out.getClass(), servletOutput.getClass());
88      assertNotNull(wrapper.getWriter());
89    }
90  
91    @Test
92    public void testReset() throws IOException {
93      when(response.isCommitted()).thenReturn(false);
94      ServletOutputStream out = mock(ServletOutputStream.class);
95      when(response.getOutputStream()).thenReturn(out);
96  
97      ServletOutputStream servletOutput = wrapper.getOutputStream();
98      verify(response).addHeader("Content-Encoding", "gzip");
99      assertEquals(GZIPResponseStream.class, servletOutput.getClass());
100     wrapper.reset();
101     verify(response).setHeader("Content-Encoding", null);
102 
103     when(response.isCommitted()).thenReturn(true);
104     servletOutput = wrapper.getOutputStream();
105     assertEquals(out.getClass(), servletOutput.getClass());
106   }
107 
108   @Test
109   public void testSendError() throws IOException {
110     wrapper.sendError(404);
111     verify(response).sendError(404);
112 
113     wrapper.sendError(404, "error message");
114     verify(response).sendError(404, "error message");
115   }
116 
117 }