optimised HttpFields

This commit is contained in:
Greg Wilkins 2014-08-05 17:26:27 +10:00
parent 6b3c8d06a9
commit bec34b460f
37 changed files with 265 additions and 157 deletions

View File

@ -19,8 +19,10 @@
package org.eclipse.jetty.http;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.ConcurrentModificationException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
@ -34,7 +36,6 @@ import java.util.StringTokenizer;
import org.eclipse.jetty.util.ArrayTernaryTrie;
import org.eclipse.jetty.util.LazyList;
import org.eclipse.jetty.util.QuotedStringTokenizer;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.Trie;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
@ -55,11 +56,12 @@ public class HttpFields implements Iterable<HttpField>
private static final Logger LOG = Log.getLogger(HttpFields.class);
private final List<HttpField> _fields;
private HttpField[] _fields;
private int _size;
public HttpFields()
{
_fields=new ArrayList<>();
_fields=new HttpField[20];
}
/**
@ -67,18 +69,18 @@ public class HttpFields implements Iterable<HttpField>
*/
public HttpFields(int capacity)
{
_fields=new ArrayList<>(capacity);
_fields=new HttpField[capacity];
}
public int size()
{
return _fields.size();
return _size;
}
@Override
public Iterator<HttpField> iterator()
{
return _fields.iterator();
return new Itr();
}
/**
@ -86,7 +88,7 @@ public class HttpFields implements Iterable<HttpField>
*/
public Collection<String> getFieldNamesCollection()
{
final Set<String> list = new HashSet<>(_fields.size());
final Set<String> list = new HashSet<>(_size);
for (HttpField f : this)
{
if (f!=null)
@ -111,14 +113,16 @@ public class HttpFields implements Iterable<HttpField>
*/
public HttpField getField(int i)
{
return _fields.get(i);
if (i>=_size)
throw new NoSuchElementException();
return _fields[i];
}
public HttpField getField(HttpHeader header)
{
for (int i=0;i<_fields.size();i++)
for (int i=0;i<_size;i++)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getHeader()==header)
return f;
}
@ -127,9 +131,9 @@ public class HttpFields implements Iterable<HttpField>
public HttpField getField(String name)
{
for (int i=0;i<_fields.size();i++)
for (int i=0;i<_size;i++)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getName().equalsIgnoreCase(name))
return f;
}
@ -138,9 +142,9 @@ public class HttpFields implements Iterable<HttpField>
public boolean contains(HttpField field)
{
for (int i=_fields.size();i-->0;)
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.isSameName(field) && f.contains(field.getValue()))
return true;
}
@ -149,9 +153,9 @@ public class HttpFields implements Iterable<HttpField>
public boolean contains(HttpHeader header, String value)
{
for (int i=_fields.size();i-->0;)
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getHeader()==header && f.contains(value))
return true;
}
@ -160,9 +164,9 @@ public class HttpFields implements Iterable<HttpField>
public boolean contains(String name, String value)
{
for (int i=_fields.size();i-->0;)
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getName().equalsIgnoreCase(name) && f.contains(value))
return true;
}
@ -172,39 +176,35 @@ public class HttpFields implements Iterable<HttpField>
public boolean containsKey(String name)
{
for (int i=_fields.size();i-->0;)
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getName().equalsIgnoreCase(name))
return true;
}
return false;
}
public String getStringField(HttpHeader header)
{
return getStringField(header.asString());
}
public String get(HttpHeader header)
{
return getStringField(header.asString());
for (int i=0;i<_size;i++)
{
HttpField f=_fields[i];
if (f.getHeader()==header)
return f.getValue();
}
return null;
}
public String get(String header)
{
return getStringField(header);
}
/**
* @return the value of a field, or null if not found. For multiple fields of the same name,
* only the first is returned.
* @param name the case-insensitive field name
*/
public String getStringField(String name)
{
HttpField field = getField(name);
return field==null?null:field.getValue();
for (int i=0;i<_size;i++)
{
HttpField f=_fields[i];
if (f.getName().equalsIgnoreCase(header))
return f.getValue();
}
return null;
}
/**
@ -230,9 +230,9 @@ public class HttpFields implements Iterable<HttpField>
*/
public Enumeration<String> getValues(final String name)
{
for (int i=0;i<_fields.size();i++)
for (int i=0;i<_size;i++)
{
final HttpField f = _fields.get(i);
final HttpField f = _fields[i];
if (f.getName().equalsIgnoreCase(name) && f.getValue()!=null)
{
@ -247,9 +247,9 @@ public class HttpFields implements Iterable<HttpField>
{
if (field==null)
{
while (i<_fields.size())
while (i<_size)
{
field=_fields.get(i++);
field=_fields[i++];
if (field.getName().equalsIgnoreCase(name) && field.getValue()!=null)
return true;
}
@ -270,7 +270,6 @@ public class HttpFields implements Iterable<HttpField>
}
throw new NoSuchElementException();
}
};
}
}
@ -328,22 +327,24 @@ public class HttpFields implements Iterable<HttpField>
public void put(HttpField field)
{
boolean put=false;
for (int i=_fields.size();i-->0;)
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.isSameName(field))
{
if (put)
_fields.remove(i);
{
System.arraycopy(_fields,i+1,_fields,i,--_size-i);
}
else
{
_fields.set(i,field);
_fields[i]=field;
put=true;
}
}
}
if (!put)
_fields.add(field);
add(field);
}
/**
@ -408,7 +409,7 @@ public class HttpFields implements Iterable<HttpField>
return;
HttpField field = new HttpField(name, value);
_fields.add(field);
add(field);
}
public void add(HttpHeader header, HttpHeaderValue value) throws IllegalArgumentException
@ -429,7 +430,7 @@ public class HttpFields implements Iterable<HttpField>
if (value == null) throw new IllegalArgumentException("null value");
HttpField field = new HttpField(header, value);
_fields.add(field);
add(field);
}
/**
@ -439,13 +440,17 @@ public class HttpFields implements Iterable<HttpField>
*/
public HttpField remove(HttpHeader name)
{
for (int i=_fields.size();i-->0;)
HttpField removed=null;
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getHeader()==name)
return _fields.remove(i);
{
removed=f;
System.arraycopy(_fields,i+1,_fields,i,--_size-i);
}
}
return null;
return removed;
}
/**
@ -455,13 +460,17 @@ public class HttpFields implements Iterable<HttpField>
*/
public HttpField remove(String name)
{
for (int i=_fields.size();i-->0;)
HttpField removed=null;
for (int i=_size;i-->0;)
{
HttpField f=_fields.get(i);
HttpField f=_fields[i];
if (f.getName().equalsIgnoreCase(name))
return _fields.remove(i);
{
removed=f;
System.arraycopy(_fields,i+1,_fields,i,--_size-i);
}
}
return null;
return removed;
}
/**
@ -622,17 +631,20 @@ public class HttpFields implements Iterable<HttpField>
public void clear()
{
_fields.clear();
_size=0;
}
public void add(HttpField field)
{
_fields.add(field);
if (_size==_fields.length)
_fields=Arrays.copyOf(_fields,_size*2);
_fields[_size++]=field;
}
public void addAll(HttpFields fields)
{
_fields.addAll(fields._fields);
for (int i=0;i<fields._size;i++)
add(fields._fields[i]);
}
/**
@ -808,5 +820,29 @@ public class HttpFields implements Iterable<HttpField>
}
private class Itr implements Iterator<HttpField>
{
int _cursor; // index of next element to return
public boolean hasNext()
{
return _cursor != _size;
}
@SuppressWarnings("unchecked")
public HttpField next()
{
int i = _cursor;
if (i >= _size)
throw new NoSuchElementException();
_cursor = i + 1;
return _fields[i];
}
public void remove()
{
throw new UnsupportedOperationException();
}
}
}

View File

@ -26,10 +26,13 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Locale;
import java.util.NoSuchElementException;
import java.util.Set;
import org.eclipse.jetty.util.BufferUtil;
import org.hamcrest.Matchers;
import org.junit.Assert;
@ -48,9 +51,10 @@ public class HttpFieldsTest
header.put("name0", "value:0");
header.put("name1", "value1");
assertEquals("value:0",header.getStringField("name0"));
assertEquals("value1",header.getStringField("name1"));
assertNull(header.getStringField("name2"));
assertEquals(2,header.size());
assertEquals("value:0",header.get("name0"));
assertEquals("value1",header.get("name1"));
assertNull(header.get("name2"));
int matches=0;
Enumeration<String> e = header.getFieldNames();
@ -68,6 +72,7 @@ public class HttpFieldsTest
assertEquals(true, e.hasMoreElements());
assertEquals(e.nextElement(), "value:0");
assertEquals(false, e.hasMoreElements());
}
@Test
@ -99,10 +104,45 @@ public class HttpFieldsTest
header.put("name0", "value0");
header.put("name1", "value1");
assertEquals("value0",header.getStringField("name0"));
assertEquals("value0",header.getStringField("Name0"));
assertEquals("value1",header.getStringField("name1"));
assertEquals("value1",header.getStringField("Name1"));
assertEquals("value0",header.get("name0"));
assertEquals("value0",header.get("Name0"));
assertEquals("value1",header.get("name1"));
assertEquals("value1",header.get("Name1"));
assertEquals(null,header.get("Name2"));
assertEquals("value0",header.getField("name0").getValue());
assertEquals("value0",header.getField("Name0").getValue());
assertEquals("value1",header.getField("name1").getValue());
assertEquals("value1",header.getField("Name1").getValue());
assertEquals(null,header.getField("Name2"));
assertEquals("value0",header.getField(0).getValue());
assertEquals("value1",header.getField(1).getValue());
try
{
header.getField(2);
Assert.fail();
}
catch(NoSuchElementException e)
{}
}
@Test
public void testGetKnown() throws Exception
{
HttpFields header = new HttpFields();
header.put("Connection", "value0");
header.put(HttpHeader.ACCEPT, "value1");
assertEquals("value0",header.get(HttpHeader.CONNECTION));
assertEquals("value1",header.get(HttpHeader.ACCEPT));
assertEquals("value0",header.getField(HttpHeader.CONNECTION).getValue());
assertEquals("value1",header.getField(HttpHeader.ACCEPT).getValue());
assertEquals(null,header.getField(HttpHeader.AGE));
assertEquals(null,header.get(HttpHeader.AGE));
}
@Test
@ -153,16 +193,16 @@ public class HttpFieldsTest
header.put("name1", "xxxxxx");
header.put("name2", "value2");
assertEquals("value0",header.getStringField("name0"));
assertEquals("xxxxxx",header.getStringField("name1"));
assertEquals("value2",header.getStringField("name2"));
assertEquals("value0",header.get("name0"));
assertEquals("xxxxxx",header.get("name1"));
assertEquals("value2",header.get("name2"));
header.put("name1", "value1");
assertEquals("value0",header.getStringField("name0"));
assertEquals("value1",header.getStringField("name1"));
assertEquals("value2",header.getStringField("name2"));
assertNull(header.getStringField("name3"));
assertEquals("value0",header.get("name0"));
assertEquals("value1",header.get("name1"));
assertEquals("value2",header.get("name2"));
assertNull(header.get("name3"));
int matches=0;
Enumeration<String> e = header.getFieldNames();
@ -188,22 +228,22 @@ public class HttpFieldsTest
@Test
public void testRemovePut() throws Exception
{
HttpFields header = new HttpFields();
HttpFields header = new HttpFields(1);
header.put("name0", "value0");
header.put("name1", "value1");
header.put("name2", "value2");
assertEquals("value0",header.getStringField("name0"));
assertEquals("value1",header.getStringField("name1"));
assertEquals("value2",header.getStringField("name2"));
assertEquals("value0",header.get("name0"));
assertEquals("value1",header.get("name1"));
assertEquals("value2",header.get("name2"));
header.remove("name1");
assertEquals("value0",header.getStringField("name0"));
assertNull(header.getStringField("name1"));
assertEquals("value2",header.getStringField("name2"));
assertNull(header.getStringField("name3"));
assertEquals("value0",header.get("name0"));
assertNull(header.get("name1"));
assertEquals("value2",header.get("name2"));
assertNull(header.get("name3"));
int matches=0;
Enumeration<String> e = header.getFieldNames();
@ -232,16 +272,16 @@ public class HttpFieldsTest
fields.add("name1", "valueA");
fields.add("name2", "value2");
assertEquals("value0",fields.getStringField("name0"));
assertEquals("valueA",fields.getStringField("name1"));
assertEquals("value2",fields.getStringField("name2"));
assertEquals("value0",fields.get("name0"));
assertEquals("valueA",fields.get("name1"));
assertEquals("value2",fields.get("name2"));
fields.add("name1", "valueB");
assertEquals("value0",fields.getStringField("name0"));
assertEquals("valueA",fields.getStringField("name1"));
assertEquals("value2",fields.getStringField("name2"));
assertNull(fields.getStringField("name3"));
assertEquals("value0",fields.get("name0"));
assertEquals("valueA",fields.get("name1"));
assertEquals("value2",fields.get("name2"));
assertNull(fields.get("name3"));
int matches=0;
Enumeration<String> e = fields.getFieldNames();
@ -346,7 +386,7 @@ public class HttpFieldsTest
assertEquals(951825600000L,d5);
fields.putDateField("D2",d1);
assertEquals("Fri, 31 Dec 1999 23:59:59 GMT",fields.getStringField("D2"));
assertEquals("Fri, 31 Dec 1999 23:59:59 GMT",fields.get("D2"));
}
@Test
@ -355,16 +395,16 @@ public class HttpFieldsTest
HttpFields fields = new HttpFields();
fields.putDateField("Dzero",0);
assertEquals("Thu, 01 Jan 1970 00:00:00 GMT",fields.getStringField("Dzero"));
assertEquals("Thu, 01 Jan 1970 00:00:00 GMT",fields.get("Dzero"));
fields.putDateField("Dminus",-1);
assertEquals("Wed, 31 Dec 1969 23:59:59 GMT",fields.getStringField("Dminus"));
assertEquals("Wed, 31 Dec 1969 23:59:59 GMT",fields.get("Dminus"));
fields.putDateField("Dminus",-1000);
assertEquals("Wed, 31 Dec 1969 23:59:59 GMT",fields.getStringField("Dminus"));
assertEquals("Wed, 31 Dec 1969 23:59:59 GMT",fields.get("Dminus"));
fields.putDateField("Dancient",Long.MIN_VALUE);
assertEquals("Sun, 02 Dec 55 16:47:04 GMT",fields.getStringField("Dancient"));
assertEquals("Sun, 02 Dec 55 16:47:04 GMT",fields.get("Dancient"));
}
@Test
@ -374,15 +414,33 @@ public class HttpFieldsTest
header.put("I1", "42");
header.put("I2", " 43 99");
header.put("I3", "-44;");
header.put("I3", "-44");
header.put("I4", " - 45abc");
header.put("N1", " - ");
header.put("N2", "xx");
long i1=header.getLongField("I1");
long i2=header.getLongField("I2");
try
{
header.getLongField("I2");
assertTrue(false);
}
catch(NumberFormatException e)
{
assertTrue(true);
}
long i3=header.getLongField("I3");
long i4=header.getLongField("I4");
try
{
header.getLongField("I4");
assertTrue(false);
}
catch(NumberFormatException e)
{
assertTrue(true);
}
try{
header.getLongField("N1");
@ -403,14 +461,12 @@ public class HttpFieldsTest
}
assertEquals(42,i1);
assertEquals(43,i2);
assertEquals(-44,i3);
assertEquals(-45,i4);
header.putLongField("I5", 46);
header.putLongField("I6",-47);
assertEquals("46",header.getStringField("I5"));
assertEquals("-47",header.getStringField("I6"));
assertEquals("46",header.get("I5"));
assertEquals("-47",header.get("I6"));
}
@ -429,12 +485,28 @@ public class HttpFieldsTest
header.add("n6", "def");
header.add("N6", "hig");
header.add("n7", "abc , def;q=0.9 , hig");
header.add("n8", "abc , def;q=0 , hig");
header.add(HttpHeader.ACCEPT, "abc , def;q=0 , hig");
for (int i=0;i<8;i++)
{
assertTrue(header.containsKey("n"+i));
assertTrue(header.containsKey("N"+i));
assertFalse(""+i,header.contains("n"+i,"xyz"));
assertEquals(""+i,i>=4,header.contains("n"+i,"def"));
}
assertTrue(header.contains(new HttpField("N5","def")));
assertTrue(header.contains(new HttpField("accept","abc")));
assertTrue(header.contains(HttpHeader.ACCEPT,"abc"));
assertFalse(header.contains(new HttpField("N5","xyz")));
assertFalse(header.contains(new HttpField("N8","def")));
assertFalse(header.contains(HttpHeader.ACCEPT,"def"));
assertFalse(header.contains(HttpHeader.AGE,"abc"));
assertFalse(header.containsKey("n11"));
}
}

View File

@ -202,13 +202,13 @@ public class ForwardedRequestCustomizer implements Customizer
// Do SSL first
if (getForwardedCipherSuiteHeader()!=null)
{
String cipher_suite=httpFields.getStringField(getForwardedCipherSuiteHeader());
String cipher_suite=httpFields.get(getForwardedCipherSuiteHeader());
if (cipher_suite!=null)
request.setAttribute("javax.servlet.request.cipher_suite",cipher_suite);
}
if (getForwardedSslSessionIdHeader()!=null)
{
String ssl_session_id=httpFields.getStringField(getForwardedSslSessionIdHeader());
String ssl_session_id=httpFields.get(getForwardedSslSessionIdHeader());
if(ssl_session_id!=null)
{
request.setAttribute("javax.servlet.request.ssl_session_id", ssl_session_id);
@ -260,7 +260,7 @@ public class ForwardedRequestCustomizer implements Customizer
if (header == null)
return null;
String headerValue = fields.getStringField(header);
String headerValue = fields.get(header);
if (headerValue == null)
return null;

View File

@ -510,7 +510,7 @@ public class Request implements HttpServletRequest
@Override
public String getContentType()
{
String content_type = _metadata.getFields().getStringField(HttpHeader.CONTENT_TYPE);
String content_type = _metadata.getFields().get(HttpHeader.CONTENT_TYPE);
if (_characterEncoding==null && content_type!=null)
{
MimeTypes.Type mime = MimeTypes.CACHE.get(content_type);
@ -603,7 +603,7 @@ public class Request implements HttpServletRequest
@Override
public String getHeader(String name)
{
return _metadata==null?null:_metadata.getFields().getStringField(name);
return _metadata==null?null:_metadata.getFields().get(name);
}
/* ------------------------------------------------------------ */

View File

@ -830,7 +830,7 @@ public class Response implements HttpServletResponse
@Override
public String getHeader(String name)
{
return _fields.getStringField(name);
return _fields.get(name);
}
@Override

View File

@ -102,7 +102,7 @@ public class PartialRFC2616Test
assertEquals("3.3.1 RFC 850 ANSI C",d3,d2);
fields.putDateField("Date",d1.getTime());
assertEquals("3.3.1 RFC 822 preferred","Sun, 06 Nov 1994 08:49:37 GMT",fields.getStringField("Date"));
assertEquals("3.3.1 RFC 822 preferred","Sun, 06 Nov 1994 08:49:37 GMT",fields.get("Date"));
}
catch (Exception e)
{

View File

@ -607,7 +607,7 @@ public class ResponseTest
response.addCookie(cookie);
String set = response.getHttpFields().getStringField("Set-Cookie");
String set = response.getHttpFields().get("Set-Cookie");
assertEquals("name=value;Version=1;Path=/path;Domain=domain;Secure;HttpOnly;Comment=comment", set);
}
@ -669,23 +669,23 @@ public class ResponseTest
HttpFields fields = response.getHttpFields();
response.addSetCookie("null",null,null,null,-1,null,false,false,-1);
assertEquals("null=",fields.getStringField("Set-Cookie"));
assertEquals("null=",fields.get("Set-Cookie"));
fields.clear();
response.addSetCookie("minimal","value",null,null,-1,null,false,false,-1);
assertEquals("minimal=value",fields.getStringField("Set-Cookie"));
assertEquals("minimal=value",fields.get("Set-Cookie"));
fields.clear();
//test cookies with same name, domain and path, only 1 allowed
response.addSetCookie("everything","wrong","domain","path",0,"to be replaced",true,true,0);
response.addSetCookie("everything","value","domain","path",0,"comment",true,true,0);
assertEquals("everything=value;Version=1;Path=path;Domain=domain;Expires=Thu, 01-Jan-1970 00:00:00 GMT;Max-Age=0;Secure;HttpOnly;Comment=comment",fields.getStringField("Set-Cookie"));
assertEquals("everything=value;Version=1;Path=path;Domain=domain;Expires=Thu, 01-Jan-1970 00:00:00 GMT;Max-Age=0;Secure;HttpOnly;Comment=comment",fields.get("Set-Cookie"));
Enumeration<String> e =fields.getValues("Set-Cookie");
assertTrue(e.hasMoreElements());
assertEquals("everything=value;Version=1;Path=path;Domain=domain;Expires=Thu, 01-Jan-1970 00:00:00 GMT;Max-Age=0;Secure;HttpOnly;Comment=comment",e.nextElement());
assertFalse(e.hasMoreElements());
assertEquals("Thu, 01 Jan 1970 00:00:00 GMT",fields.getStringField("Expires"));
assertEquals("Thu, 01 Jan 1970 00:00:00 GMT",fields.get("Expires"));
assertFalse(e.hasMoreElements());
//test cookies with same name, different domain
@ -744,31 +744,31 @@ public class ResponseTest
fields.clear();
response.addSetCookie("ev erything","va lue","do main","pa th",1,"co mment",true,true,1);
String setCookie=fields.getStringField("Set-Cookie");
String setCookie=fields.get("Set-Cookie");
assertThat(setCookie,Matchers.startsWith("\"ev erything\"=\"va lue\";Version=1;Path=\"pa th\";Domain=\"do main\";Expires="));
assertThat(setCookie,Matchers.endsWith(" GMT;Max-Age=1;Secure;HttpOnly;Comment=\"co mment\""));
fields.clear();
response.addSetCookie("name","value",null,null,-1,null,false,false,0);
setCookie=fields.getStringField("Set-Cookie");
setCookie=fields.get("Set-Cookie");
assertEquals(-1,setCookie.indexOf("Version="));
fields.clear();
response.addSetCookie("name","v a l u e",null,null,-1,null,false,false,0);
setCookie=fields.getStringField("Set-Cookie");
setCookie=fields.get("Set-Cookie");
fields.clear();
response.addSetCookie("json","{\"services\":[\"cwa\", \"aa\"]}",null,null,-1,null,false,false,-1);
assertEquals("json=\"{\\\"services\\\":[\\\"cwa\\\", \\\"aa\\\"]}\"",fields.getStringField("Set-Cookie"));
assertEquals("json=\"{\\\"services\\\":[\\\"cwa\\\", \\\"aa\\\"]}\"",fields.get("Set-Cookie"));
fields.clear();
response.addSetCookie("name","value","domain",null,-1,null,false,false,-1);
response.addSetCookie("name","other","domain",null,-1,null,false,false,-1);
assertEquals("name=other;Domain=domain",fields.getStringField("Set-Cookie"));
assertEquals("name=other;Domain=domain",fields.get("Set-Cookie"));
response.addSetCookie("name","more","domain",null,-1,null,false,false,-1);
assertEquals("name=more;Domain=domain",fields.getStringField("Set-Cookie"));
assertEquals("name=more;Domain=domain",fields.get("Set-Cookie"));
response.addSetCookie("foo","bar","domain",null,-1,null,false,false,-1);
response.addSetCookie("foo","bob","domain",null,-1,null,false,false,-1);
assertEquals("name=more;Domain=domain",fields.getStringField("Set-Cookie"));
assertEquals("name=more;Domain=domain",fields.get("Set-Cookie"));
e=fields.getValues("Set-Cookie");
assertEquals("name=more;Domain=domain",e.nextElement());
@ -776,7 +776,7 @@ public class ResponseTest
fields.clear();
response.addSetCookie("name","value%=",null,null,-1,null,false,false,0);
setCookie=fields.getStringField("Set-Cookie");
setCookie=fields.get("Set-Cookie");
assertEquals("name=value%=",setCookie);
}

View File

@ -146,7 +146,7 @@ public abstract class RFC2616BaseTest
// Test formatting
fields.putDateField("Date",expected.getTime().getTime());
Assert.assertEquals("3.3.1 RFC 822 preferred","Sun, 06 Nov 1994 08:49:37 GMT",fields.getStringField("Date"));
Assert.assertEquals("3.3.1 RFC 822 preferred","Sun, 06 Nov 1994 08:49:37 GMT",fields.get("Date"));
}
/**

View File

@ -133,7 +133,7 @@ public class IdleSessionTest
//make a request to set up a session on the server
ContentResponse response = client.GET(url + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -77,7 +77,7 @@ public class DirtyAttributeTest
ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -103,7 +103,7 @@ public class MaxInactiveMigrationTest
ContentResponse response = request.send();
assertEquals(HttpServletResponse.SC_OK, response.getStatus());
sessionCookie = response.getHeaders().getStringField("Set-Cookie");
sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue( sessionCookie != null );
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -70,7 +70,7 @@ public class ModifyMaxInactiveIntervalTest
ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -104,7 +104,7 @@ public class ReloadedSessionMissingClassTest
ContentResponse response = client.GET("http://localhost:" + port1 + contextPath +"/bar?action=set");
assertEquals( HttpServletResponse.SC_OK, response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
String sessionId = (String)webApp.getServletContext().getAttribute("foo");
assertNotNull(sessionId);

View File

@ -77,7 +77,7 @@ public class SaveIntervalTest
// Perform a request to create a session
ContentResponse response = client.GET("http://localhost:" + port + "/mod/test?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -102,7 +102,7 @@ public class SessionExpiryTest extends AbstractSessionExpiryTest
//make a request to set up a session on the server
ContentResponse response1 = client.GET(url + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -94,7 +94,7 @@ public class PurgeInvalidSessionTest
//Create a session
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -97,7 +97,7 @@ public class PurgeValidSessionTest
//Create a session
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -117,7 +117,7 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
sessionTestValue = sessionTestResponse;
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=","$1\\$Path=");
@ -144,7 +144,7 @@ public class SessionSavingValueTest extends AbstractSessionValueSavingTest
sessionTestValue = sessionTestResponse;
String setCookie = response2.getHeaders().getStringField("Set-Cookie");
String setCookie = response2.getHeaders().get("Set-Cookie");
if (setCookie != null)
sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=","$1\\$Path=");

View File

@ -86,7 +86,7 @@ public class StopSessionManagerDeleteSessionTest
//Create a session
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -74,7 +74,7 @@ public abstract class AbstractClientCrossContextSessionTest
ContentResponse response = client.GET("http://localhost:" + port + contextA + servletMapping);
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -64,7 +64,7 @@ public abstract class AbstractImmortalSessionTest
int value = 42;
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=set&value=" + value);
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -79,7 +79,7 @@ public abstract class AbstractInvalidationSessionTest
ContentResponse response1 = client.GET(urls[0] + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -87,7 +87,7 @@ public abstract class AbstractLastAccessTimeTest
ContentResponse response1 = client.GET("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
assertEquals(HttpServletResponse.SC_OK, response1.getStatus());
assertEquals("test", response1.getContentAsString());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue( sessionCookie != null );
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@ -106,7 +106,7 @@ public abstract class AbstractLastAccessTimeTest
assertEquals(HttpServletResponse.SC_OK , response2.getStatus());
assertEquals("test", response2.getContentAsString());
String setCookie = response2.getHeaders().getStringField("Set-Cookie");
String setCookie = response2.getHeaders().get("Set-Cookie");
if (setCookie!=null)
sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -82,7 +82,7 @@ public abstract class AbstractLightLoadTest
ContentResponse response1 = client.GET(urls[0] + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField( "Set-Cookie" );
String sessionCookie = response1.getHeaders().get( "Set-Cookie" );
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -86,7 +86,7 @@ public abstract class AbstractLocalSessionScavengingTest
// Create the session on node1
ContentResponse response1 = client.GET(urls[0] + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -74,7 +74,7 @@ public abstract class AbstractNewSessionTest
{
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -74,7 +74,7 @@ public abstract class AbstractOrphanedSessionTest
// Connect to server1 to create a session and get its session cookie
ContentResponse response1 = client.GET("http://localhost:" + port1 + contextPath + servletMapping + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -101,7 +101,7 @@ public abstract class AbstractProxySerializationTest
{
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -66,7 +66,7 @@ public abstract class AbstractRemoveSessionTest
{
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -81,7 +81,7 @@ public abstract class AbstractSessionCookieTest
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
//sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -75,7 +75,7 @@ public abstract class AbstractSessionExpiryTest
//make a request to set up a session on the server
ContentResponse response = client.GET(url + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@ -125,7 +125,7 @@ public abstract class AbstractSessionExpiryTest
//make a request to set up a session on the server
ContentResponse response1 = client.GET(url + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -119,7 +119,7 @@ public abstract class AbstractSessionInvalidateAndCreateTest
// Create the session
ContentResponse response1 = client.GET(url + "?action=init");
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -72,7 +72,7 @@ public abstract class AbstractSessionMigrationTest
Request request1 = client.POST("http://localhost:" + port1 + contextPath + servletMapping + "?action=set&value=" + value);
ContentResponse response1 = request1.send();
assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -70,7 +70,7 @@ public abstract class AbstractSessionRenewTest
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
assertFalse(testListener.isCalled());
@ -79,7 +79,7 @@ public abstract class AbstractSessionRenewTest
request.header("Cookie", sessionCookie);
ContentResponse renewResponse = request.send();
assertEquals(HttpServletResponse.SC_OK,renewResponse.getStatus());
String renewSessionCookie = renewResponse.getHeaders().getStringField("Set-Cookie");
String renewSessionCookie = renewResponse.getHeaders().get("Set-Cookie");
assertNotNull(renewSessionCookie);
assertNotSame(sessionCookie, renewSessionCookie);
assertTrue(testListener.isCalled());

View File

@ -72,7 +72,7 @@ public abstract class AbstractSessionValueSavingTest
sessionTestValue = Long.parseLong(response1.getContentAsString());
String sessionCookie = response1.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response1.getHeaders().get("Set-Cookie");
assertTrue( sessionCookie != null );
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
@ -95,7 +95,7 @@ public abstract class AbstractSessionValueSavingTest
assertTrue(sessionTestValue < Long.parseLong(response2.getContentAsString()));
sessionTestValue = Long.parseLong(response2.getContentAsString());
String setCookie = response1.getHeaders().getStringField("Set-Cookie");
String setCookie = response1.getHeaders().get("Set-Cookie");
if (setCookie!=null)
sessionCookie = setCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -74,7 +74,7 @@ public abstract class AbstractStopSessionManagerPreserveSessionTest
//Create a session
ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
assertEquals(HttpServletResponse.SC_OK,response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");

View File

@ -120,7 +120,7 @@ public abstract class AbstractWebAppObjectInSessionTest
ContentResponse response = request.send();
assertEquals( HttpServletResponse.SC_OK, response.getStatus());
String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
String sessionCookie = response.getHeaders().get("Set-Cookie");
assertTrue(sessionCookie != null);
// Mangle the cookie, replacing Path with $Path, etc.
sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");