/*
* The contents of this file are subject to the terms of the Common Development and
* Distribution License (the License). You may not use this file except in compliance with the
* License.
*
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
* specific language governing permission and limitations under the License.
*
* When distributing Covered Software, include this CDDL Header Notice in each file and include
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions copyright [year] [name of copyright owner]".
*
* Copyright 2013 ForgeRock Inc.
*/
package com.sun.identity.shared.whitelist;
import org.fest.assertions.ComparisonFailureFactory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.fest.assertions.Assertions.assertThat;
/**
* Unit test for URLResourceName.
*
* @author andrew.forrest@forgerock.com
*/
public class URLResourceNameTest {
private URLResourceName resourceName;
@BeforeMethod
public void setUp() {
resourceName = new URLResourceName();
}
/**
* Tests that the normalisation process adheres to the expected rules.
*/
@Test
public void verifyPortHandling() {
// Previous ports are maintained.
assertNormalisation("http://www.example.com:80/hello", "http://www.example.com:80/hello");
assertNormalisation("http://www.example.com:12345/hello", "http://www.example.com:12345/hello");
// Verify default ports are added where appropriate.
assertNormalisation("http://www.example.com/hello", "http://www.example.com:80/hello");
assertNormalisation("https://www.example.com/hello", "https://www.example.com:443/hello");
assertNormalisation("protocol://www.example.com/hello", "protocol://www.example.com/hello");
// With wildcards.
assertNormalisation("http://www.example.com:80/hello*", "http://www.example.com:80/hello*");
assertNormalisation("http://www.example*:80/hello", "http://www.example*:80/hello");
assertNormalisation("http*://www.example.com:80/hello", "http*://www.example.com:80/hello");
// Special cases: Due to the wildcard positions it is not possible to determine the port.
assertNormalisation("http*://www.example.com/hello", "http*://www.example.com:*/hello");
assertNormalisation("https*://www.example.com/hello", "https*://www.example.com:*/hello");
assertNormalisation("protocol*://www.example.com/hello", "protocol*://www.example.com/hello");
assertNormalisation("http://www.example.com:*/hello", "http://www.example.com:*/hello");
}
/**
* Convenient assertion method for verifying normalisation of resources.
*
* @param untreatedResource
* The resource before it's been normalised.
* @param treatedResource
* The expected resource after it's been normalised.
*/
private void assertNormalisation(String untreatedResource, String treatedResource) {
try {
assertThat(resourceName.canonicalize(untreatedResource)).isEqualTo(treatedResource);
} catch (Exception e) {
String message = "Normalisation failed: " + e.getMessage();
throw ComparisonFailureFactory.comparisonFailure(message, treatedResource, "");
}
}
}