/**
* Licensed to DigitalPebble Ltd under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* DigitalPebble licenses this file to You 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 com.digitalpebble.stormcrawler.util;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import org.apache.http.cookie.Cookie;
import org.junit.Assert;
import org.junit.Test;
public class CookieConverterTest {
private static String securedUrl = "https://someurl.com";
private static String unsecuredUrl = "http://someurl.com";
private static String dummyCookieHeader = "nice tasty test cookie header!";
private static String dummyCookieValue = "nice tasty test cookie value!";
@Test
public void testSimpleCookieAndUrl() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, null, null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testNotExpiredCookie() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, "Tue, 11 Apr 2117 07:13:39 -0000",
null, null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testExpiredCookie() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, "Tue, 11 Apr 2016 07:13:39 -0000",
null, null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl));
Assert.assertEquals("Should have 0 cookies, since cookie was expired",
0, result.size());
}
@Test
public void testValidPath() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, "/", null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/somepage"));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testValidPath2() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, "/", null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testValidPath3() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, "/someFolder", null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/someFolder"));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testValidPath4() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, "/someFolder", null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testInvalidPath() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, "/someFolder", null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/someOtherFolder/SomeFolder"));
Assert.assertEquals("path mismatch, should have 0 cookies", 0,
result.size());
}
@Test
public void testValidDomain() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, "someurl.com", null, null, null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testInvalidDomain() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, "someOtherUrl.com", null, null, null);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals("Domain is not valid - Should have 0 cookies", 0,
result.size());
}
@Test
public void testSecurFlagHttp() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, null, Boolean.TRUE);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(unsecuredUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals(
"Target url is not secured - Should have 0 cookies", 0,
result.size());
}
@Test
public void testSecurFlagHttpS() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, null, null, null, Boolean.TRUE);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(securedUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals("Target url is secured - Should have 1 cookie", 1,
result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void testFullCookie() {
String[] cookiesStrings = new String[1];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, "someurl.com",
"Tue, 11 Apr 2117 07:13:39 -0000", "/", true);
cookiesStrings[0] = dummyCookieString;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(securedUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals("Should have 1 cookie", 1, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
}
@Test
public void test2Cookies() {
String[] cookiesStrings = new String[2];
String dummyCookieString = buildCookieString(dummyCookieHeader,
dummyCookieValue, "someurl.com",
"Tue, 11 Apr 2117 07:13:39 -0000", "/", true);
String dummyCookieString2 = buildCookieString(dummyCookieHeader + "2",
dummyCookieValue + "2", "someurl.com",
"Tue, 11 Apr 2117 07:13:39 -0000", "/", true);
cookiesStrings[0] = dummyCookieString;
cookiesStrings[1] = dummyCookieString2;
List<Cookie> result = CookieConverter.getCookies(cookiesStrings,
getUrl(securedUrl + "/someFolder/SomeOtherFolder"));
Assert.assertEquals("Should have 2 cookies", 2, result.size());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader, result.get(0).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue, result.get(0).getValue());
Assert.assertEquals("Cookie header should be as defined",
dummyCookieHeader + "2", result.get(1).getName());
Assert.assertEquals("Cookie value should be as defined",
dummyCookieValue + "2", result.get(1).getValue());
}
@Test
public void testDomainsChecker() {
boolean result = CookieConverter.checkDomainMatchToUrl(".example.com",
"www.example.com");
Assert.assertEquals("domain is valid", true, result);
}
@Test
public void testDomainsChecker2() {
boolean result = CookieConverter.checkDomainMatchToUrl(".example.com",
"example.com");
Assert.assertEquals("domain is valid", true, result);
}
@Test
public void testDomainsChecker3() {
boolean result = CookieConverter.checkDomainMatchToUrl("example.com",
"www.example.com");
Assert.assertEquals("domain is valid", true, result);
}
@Test
public void testDomainsChecker4() {
boolean result = CookieConverter.checkDomainMatchToUrl("example.com",
"anotherexample.com");
Assert.assertEquals("domain is not valid", false, result);
}
private URL getUrl(String urlString) {
try {
return new URL(urlString);
} catch (MalformedURLException e) {
return null;
}
}
private String buildCookieString(String header, String value,
String domain, String expires, String path, Boolean secure) {
StringBuilder builder = new StringBuilder(
buildCookiePart(header, value));
if (domain != null) {
builder.append(buildCookiePart("domain", domain));
}
if (expires != null) {
builder.append(buildCookiePart("expires", expires));
}
if (path != null) {
builder.append(buildCookiePart("path", path));
}
if (secure != null) {
builder.append("secure;");
}
return builder.toString();
}
private String buildCookiePart(String partName, String partValue) {
return partName + "=" + partValue + ";";
}
}