/*
* Copyright (c) 2008-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cometd.websocket.server.common;
import java.net.HttpCookie;
import java.text.ParseException;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
public class CookieParserTest {
@Test(expected = ParseException.class)
public void testNoName() throws Exception {
String header = "=value";
CookieParser.parse(header);
}
@Test(expected = ParseException.class)
public void parseUnclosedQuote() throws Exception {
String name = "name";
String value = "value";
String header = name + "=\"" + value;
CookieParser.parse(header);
}
@Test
public void parseCookie() throws Exception {
String name = "name";
String value = "value";
String header = name + "=" + value;
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie = cookies.get(0);
Assert.assertEquals(name, cookie.getName());
Assert.assertEquals(value, cookie.getValue());
}
@Test
public void parseNameStartingWithWhiteSpace() throws Exception {
String name = "name";
String value = "value";
String header = " " + name + "=" + value;
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie = cookies.get(0);
Assert.assertEquals(name, cookie.getName());
Assert.assertEquals(value, cookie.getValue());
}
@Test
public void parseNameEndingWithWhiteSpace() throws Exception {
String name = "name";
String value = "value";
String header = name + " =" + value;
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie = cookies.get(0);
Assert.assertEquals(name, cookie.getName());
Assert.assertEquals(value, cookie.getValue());
}
@Test
public void parseValueStartingWithWhiteSpace() throws Exception {
String name = "name";
String value = "value";
String header = name + "= " + value;
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie = cookies.get(0);
Assert.assertEquals(name, cookie.getName());
Assert.assertEquals(value, cookie.getValue());
}
@Test
public void parseValueEndingWithWhiteSpace() throws Exception {
String name = "name";
String value = "value";
String header = name + "=" + value + " ";
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie = cookies.get(0);
Assert.assertEquals(name, cookie.getName());
Assert.assertEquals(value, cookie.getValue());
}
@Test
public void parseTwoCookies() throws Exception {
String name1 = "name1";
String value1 = "value1";
String name2 = "name2";
String value2 = "value2";
String header = name1 + "=" + value1 + "; " + name2 + " = " + value2;
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(2, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name1, cookie1.getName());
Assert.assertEquals(value1, cookie1.getValue());
HttpCookie cookie2 = cookies.get(1);
Assert.assertEquals(name2, cookie2.getName());
Assert.assertEquals(value2, cookie2.getValue());
}
@Test
public void parseTwoCookiesFirstQuoted() throws Exception {
String name1 = "name1";
String value1 = "value1";
String name2 = "name2";
String value2 = "value2";
String header = name1 + "=\"" + value1 + "\"; " + name2 + " = " + value2 + "; ";
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(2, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name1, cookie1.getName());
Assert.assertEquals(value1, cookie1.getValue());
HttpCookie cookie2 = cookies.get(1);
Assert.assertEquals(name2, cookie2.getName());
Assert.assertEquals(value2, cookie2.getValue());
}
@Test
public void parseTwoCookiesSecondQuoted() throws Exception {
String name1 = "name1";
String value1 = "value1";
String name2 = "name2";
String value2 = "value2";
String header = name1 + "=" + value1 + "; " + name2 + " = \"" + value2 + "\" ; ";
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(2, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name1, cookie1.getName());
Assert.assertEquals(value1, cookie1.getValue());
HttpCookie cookie2 = cookies.get(1);
Assert.assertEquals(name2, cookie2.getName());
Assert.assertEquals(value2, cookie2.getValue());
}
@Test
public void parseCookieQuotedWithSemicolonInValue() throws Exception {
String name = "name";
String value = "va;lue";
String header = name + "=\"" + value + "\"";
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name, cookie1.getName());
Assert.assertEquals(value, cookie1.getValue());
}
@Test
public void parseCookieWithNameValueAttribute() throws Exception {
String name = "name";
String value = "value";
String header = name + "=" + value + "; $Path=/";
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name, cookie1.getName());
Assert.assertEquals(value, cookie1.getValue());
}
@Test
public void parseCookieWithVersionAttributeAtBeginning() throws Exception {
String name = "name";
String value = "value";
String header = "$Version=1; " + name + "=" + value;
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name, cookie1.getName());
Assert.assertEquals(value, cookie1.getValue());
}
@Test
public void parseCookieWithNameOnlyAttribute() throws Exception {
String name = "name";
String value = "value";
String header = name + "=" + value + "; $Port";
List<HttpCookie> cookies = CookieParser.parse(header);
Assert.assertEquals(1, cookies.size());
HttpCookie cookie1 = cookies.get(0);
Assert.assertEquals(name, cookie1.getName());
Assert.assertEquals(value, cookie1.getValue());
}
}