001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.rest; 019 020import static org.junit.jupiter.api.Assertions.assertEquals; 021import static org.junit.jupiter.api.Assertions.assertNotNull; 022import static org.mockito.Mockito.mock; 023import static org.mockito.Mockito.never; 024import static org.mockito.Mockito.verify; 025import static org.mockito.Mockito.when; 026 027import java.io.IOException; 028import javax.servlet.ServletOutputStream; 029import javax.servlet.http.HttpServletResponse; 030import org.apache.hadoop.hbase.rest.filter.GZIPResponseStream; 031import org.apache.hadoop.hbase.rest.filter.GZIPResponseWrapper; 032import org.apache.hadoop.hbase.testclassification.RestTests; 033import org.apache.hadoop.hbase.testclassification.SmallTests; 034import org.junit.jupiter.api.Tag; 035import org.junit.jupiter.api.Test; 036 037@Tag(RestTests.TAG) 038@Tag(SmallTests.TAG) 039public class TestGZIPResponseWrapper { 040 041 private final HttpServletResponse response = mock(HttpServletResponse.class); 042 private final GZIPResponseWrapper wrapper = new GZIPResponseWrapper(response); 043 044 /** 045 * wrapper should set all headers except "content-length" 046 */ 047 @Test 048 public void testHeader() throws IOException { 049 wrapper.setStatus(200); 050 verify(response).setStatus(200); 051 wrapper.addHeader("header", "header value"); 052 verify(response).addHeader("header", "header value"); 053 wrapper.addHeader("content-length", "header value2"); 054 verify(response, never()).addHeader("content-length", "header value"); 055 056 wrapper.setIntHeader("header", 5); 057 verify(response).setIntHeader("header", 5); 058 wrapper.setIntHeader("content-length", 4); 059 verify(response, never()).setIntHeader("content-length", 4); 060 061 wrapper.setHeader("set-header", "new value"); 062 verify(response).setHeader("set-header", "new value"); 063 wrapper.setHeader("content-length", "content length value"); 064 verify(response, never()).setHeader("content-length", "content length value"); 065 066 wrapper.sendRedirect("location"); 067 verify(response).sendRedirect("location"); 068 069 wrapper.flushBuffer(); 070 verify(response).flushBuffer(); 071 } 072 073 @Test 074 public void testResetBuffer() throws IOException { 075 when(response.isCommitted()).thenReturn(false); 076 ServletOutputStream out = mock(ServletOutputStream.class); 077 when(response.getOutputStream()).thenReturn(out); 078 079 ServletOutputStream servletOutput = wrapper.getOutputStream(); 080 assertEquals(GZIPResponseStream.class, servletOutput.getClass()); 081 wrapper.resetBuffer(); 082 verify(response).setHeader("Content-Encoding", null); 083 084 when(response.isCommitted()).thenReturn(true); 085 servletOutput = wrapper.getOutputStream(); 086 assertEquals(out.getClass(), servletOutput.getClass()); 087 assertNotNull(wrapper.getWriter()); 088 } 089 090 @Test 091 public void testReset() throws IOException { 092 when(response.isCommitted()).thenReturn(false); 093 ServletOutputStream out = mock(ServletOutputStream.class); 094 when(response.getOutputStream()).thenReturn(out); 095 096 ServletOutputStream servletOutput = wrapper.getOutputStream(); 097 verify(response).addHeader("Content-Encoding", "gzip"); 098 assertEquals(GZIPResponseStream.class, servletOutput.getClass()); 099 wrapper.reset(); 100 verify(response).setHeader("Content-Encoding", null); 101 102 when(response.isCommitted()).thenReturn(true); 103 servletOutput = wrapper.getOutputStream(); 104 assertEquals(out.getClass(), servletOutput.getClass()); 105 } 106 107 @Test 108 public void testSendError() throws IOException { 109 wrapper.sendError(404); 110 verify(response).sendError(404); 111 112 wrapper.sendError(404, "error message"); 113 verify(response).sendError(404, "error message"); 114 } 115}