1 /* 2 * Copyright 2002-2012 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springframework.http; 18 19 import java.net.URI; 20 import java.net.URISyntaxException; 21 import java.nio.charset.Charset; 22 import java.util.ArrayList; 23 import java.util.Arrays; 24 import java.util.Calendar; 25 import java.util.EnumSet; 26 import java.util.GregorianCalendar; 27 import java.util.List; 28 import java.util.Locale; 29 import java.util.TimeZone; 30 31 import org.junit.Before; 32 import org.junit.Test; 33 34 import static org.junit.Assert.*; 35 36 /** @author Arjen Poutsma */ 37 public class HttpHeadersTests { 38 39 private HttpHeaders headers; 40 41 @Before setUp()42 public void setUp() { 43 headers = new HttpHeaders(); 44 } 45 46 @Test accept()47 public void accept() { 48 MediaType mediaType1 = new MediaType("text", "html"); 49 MediaType mediaType2 = new MediaType("text", "plain"); 50 List<MediaType> mediaTypes = new ArrayList<MediaType>(2); 51 mediaTypes.add(mediaType1); 52 mediaTypes.add(mediaType2); 53 headers.setAccept(mediaTypes); 54 assertEquals("Invalid Accept header", mediaTypes, headers.getAccept()); 55 assertEquals("Invalid Accept header", "text/html, text/plain", headers.getFirst("Accept")); 56 } 57 58 // SPR-9655 59 60 @Test acceptiPlanet()61 public void acceptiPlanet() { 62 headers.add("Accept", "text/html"); 63 headers.add("Accept", "text/plain"); 64 List<MediaType> expected = Arrays.asList(new MediaType("text", "html"), new MediaType("text", "plain")); 65 assertEquals("Invalid Accept header", expected, headers.getAccept()); 66 } 67 68 @Test acceptCharsets()69 public void acceptCharsets() { 70 Charset charset1 = Charset.forName("UTF-8"); 71 Charset charset2 = Charset.forName("ISO-8859-1"); 72 List<Charset> charsets = new ArrayList<Charset>(2); 73 charsets.add(charset1); 74 charsets.add(charset2); 75 headers.setAcceptCharset(charsets); 76 assertEquals("Invalid Accept header", charsets, headers.getAcceptCharset()); 77 assertEquals("Invalid Accept header", "utf-8, iso-8859-1", headers.getFirst("Accept-Charset")); 78 } 79 80 @Test acceptCharsetWildcard()81 public void acceptCharsetWildcard() { 82 headers.set("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); 83 assertEquals("Invalid Accept header", Arrays.asList(Charset.forName("ISO-8859-1"), Charset.forName("UTF-8")), 84 headers.getAcceptCharset()); 85 } 86 87 @Test allow()88 public void allow() { 89 EnumSet<HttpMethod> methods = EnumSet.of(HttpMethod.GET, HttpMethod.POST); 90 headers.setAllow(methods); 91 assertEquals("Invalid Allow header", methods, headers.getAllow()); 92 assertEquals("Invalid Allow header", "GET,POST", headers.getFirst("Allow")); 93 } 94 95 @Test contentLength()96 public void contentLength() { 97 long length = 42L; 98 headers.setContentLength(length); 99 assertEquals("Invalid Content-Length header", length, headers.getContentLength()); 100 assertEquals("Invalid Content-Length header", "42", headers.getFirst("Content-Length")); 101 } 102 103 @Test contentType()104 public void contentType() { 105 MediaType contentType = new MediaType("text", "html", Charset.forName("UTF-8")); 106 headers.setContentType(contentType); 107 assertEquals("Invalid Content-Type header", contentType, headers.getContentType()); 108 assertEquals("Invalid Content-Type header", "text/html;charset=UTF-8", headers.getFirst("Content-Type")); 109 } 110 111 @Test location()112 public void location() throws URISyntaxException { 113 URI location = new URI("http://www.example.com/hotels"); 114 headers.setLocation(location); 115 assertEquals("Invalid Location header", location, headers.getLocation()); 116 assertEquals("Invalid Location header", "http://www.example.com/hotels", headers.getFirst("Location")); 117 } 118 119 @Test eTag()120 public void eTag() { 121 String eTag = "\"v2.6\""; 122 headers.setETag(eTag); 123 assertEquals("Invalid ETag header", eTag, headers.getETag()); 124 assertEquals("Invalid ETag header", "\"v2.6\"", headers.getFirst("ETag")); 125 } 126 127 @Test(expected = IllegalArgumentException.class) illegalETag()128 public void illegalETag() { 129 String eTag = "v2.6"; 130 headers.setETag(eTag); 131 assertEquals("Invalid ETag header", eTag, headers.getETag()); 132 assertEquals("Invalid ETag header", "\"v2.6\"", headers.getFirst("ETag")); 133 } 134 135 @Test ifNoneMatch()136 public void ifNoneMatch() { 137 String ifNoneMatch = "\"v2.6\""; 138 headers.setIfNoneMatch(ifNoneMatch); 139 assertEquals("Invalid If-None-Match header", ifNoneMatch, headers.getIfNoneMatch().get(0)); 140 assertEquals("Invalid If-None-Match header", "\"v2.6\"", headers.getFirst("If-None-Match")); 141 } 142 143 @Test ifNoneMatchList()144 public void ifNoneMatchList() { 145 String ifNoneMatch1 = "\"v2.6\""; 146 String ifNoneMatch2 = "\"v2.7\""; 147 List<String> ifNoneMatchList = new ArrayList<String>(2); 148 ifNoneMatchList.add(ifNoneMatch1); 149 ifNoneMatchList.add(ifNoneMatch2); 150 headers.setIfNoneMatch(ifNoneMatchList); 151 assertEquals("Invalid If-None-Match header", ifNoneMatchList, headers.getIfNoneMatch()); 152 assertEquals("Invalid If-None-Match header", "\"v2.6\", \"v2.7\"", headers.getFirst("If-None-Match")); 153 } 154 155 @Test date()156 public void date() { 157 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20); 158 calendar.setTimeZone(TimeZone.getTimeZone("CET")); 159 long date = calendar.getTimeInMillis(); 160 headers.setDate(date); 161 assertEquals("Invalid Date header", date, headers.getDate()); 162 assertEquals("Invalid Date header", "Thu, 18 Dec 2008 10:20:00 GMT", headers.getFirst("date")); 163 164 // RFC 850 165 headers.set("Date", "Thursday, 18-Dec-08 11:20:00 CET"); 166 assertEquals("Invalid Date header", date, headers.getDate()); 167 } 168 169 @Test(expected = IllegalArgumentException.class) dateInvalid()170 public void dateInvalid() { 171 headers.set("Date", "Foo Bar Baz"); 172 headers.getDate(); 173 } 174 175 @Test dateOtherLocale()176 public void dateOtherLocale() { 177 Locale defaultLocale = Locale.getDefault(); 178 try { 179 Locale.setDefault(new Locale("nl", "nl")); 180 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20); 181 calendar.setTimeZone(TimeZone.getTimeZone("CET")); 182 long date = calendar.getTimeInMillis(); 183 headers.setDate(date); 184 assertEquals("Invalid Date header", "Thu, 18 Dec 2008 10:20:00 GMT", headers.getFirst("date")); 185 assertEquals("Invalid Date header", date, headers.getDate()); 186 } 187 finally { 188 Locale.setDefault(defaultLocale); 189 } 190 } 191 192 @Test lastModified()193 public void lastModified() { 194 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20); 195 calendar.setTimeZone(TimeZone.getTimeZone("CET")); 196 long date = calendar.getTimeInMillis(); 197 headers.setLastModified(date); 198 assertEquals("Invalid Last-Modified header", date, headers.getLastModified()); 199 assertEquals("Invalid Last-Modified header", "Thu, 18 Dec 2008 10:20:00 GMT", 200 headers.getFirst("last-modified")); 201 } 202 203 @Test expires()204 public void expires() { 205 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20); 206 calendar.setTimeZone(TimeZone.getTimeZone("CET")); 207 long date = calendar.getTimeInMillis(); 208 headers.setExpires(date); 209 assertEquals("Invalid Expires header", date, headers.getExpires()); 210 assertEquals("Invalid Expires header", "Thu, 18 Dec 2008 10:20:00 GMT", headers.getFirst("expires")); 211 } 212 213 @Test ifModifiedSince()214 public void ifModifiedSince() { 215 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20); 216 calendar.setTimeZone(TimeZone.getTimeZone("CET")); 217 long date = calendar.getTimeInMillis(); 218 headers.setIfModifiedSince(date); 219 assertEquals("Invalid If-Modified-Since header", date, headers.getIfNotModifiedSince()); 220 assertEquals("Invalid If-Modified-Since header", "Thu, 18 Dec 2008 10:20:00 GMT", 221 headers.getFirst("if-modified-since")); 222 } 223 224 @Test pragma()225 public void pragma() { 226 String pragma = "no-cache"; 227 headers.setPragma(pragma); 228 assertEquals("Invalid Pragma header", pragma, headers.getPragma()); 229 assertEquals("Invalid Pragma header", "no-cache", headers.getFirst("pragma")); 230 } 231 232 @Test cacheControl()233 public void cacheControl() { 234 String cacheControl = "no-cache"; 235 headers.setCacheControl(cacheControl); 236 assertEquals("Invalid Cache-Control header", cacheControl, headers.getCacheControl()); 237 assertEquals("Invalid Cache-Control header", "no-cache", headers.getFirst("cache-control")); 238 } 239 240 @Test contentDisposition()241 public void contentDisposition() { 242 headers.setContentDispositionFormData("name", null); 243 assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"", 244 headers.getFirst("Content-Disposition")); 245 246 headers.setContentDispositionFormData("name", "filename"); 247 assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"; filename=\"filename\"", 248 headers.getFirst("Content-Disposition")); 249 } 250 251 252 } 253