package org.mortbay.jetty.handler.rewrite; import org.mortbay.jetty.HttpFields; public class ForwardedSchemeHeaderRuleTest extends AbstractRuleTestCase { private ForwardedSchemeHeaderRule _rule; private HttpFields _requestHeaderFields; public void setUp() throws Exception { super.setUp(); _rule = new ForwardedSchemeHeaderRule(); _requestHeaderFields = _connection.getRequestFields(); _request.setScheme(null); } public void testDefaultScheme() throws Exception { setRequestHeader("X-Forwarded-Scheme", "https"); _rule.setHeader("X-Forwarded-Scheme"); _rule.setHeaderValue("https"); _rule.matchAndApply("/", _request, _response); assertEquals("https", _request.getScheme()); } public void testScheme() throws Exception { setRequestHeader("X-Forwarded-Scheme", "https"); _rule.setHeader("X-Forwarded-Scheme"); _rule.setHeaderValue("https"); _rule.setScheme("https"); _rule.matchAndApply("/", _request, _response); assertEquals("https", _request.getScheme()); _rule.setScheme("http"); _rule.matchAndApply("/", _request, _response); assertEquals("http", _request.getScheme()); } public void testHeaderValue() throws Exception { setRequestHeader("Front-End-Https", "on"); _rule.setHeader("Front-End-Https"); _rule.setHeaderValue("on"); _rule.setScheme("https"); _rule.matchAndApply("/",_request,_response); assertEquals("https",_request.getScheme()); _request.setScheme(null); // header value doesn't match rule's value setRequestHeader("Front-End-Https", "off"); _rule.matchAndApply("/",_request,_response); assertEquals(null,_request.getScheme()); _request.setScheme(null); // header value can be any value setRequestHeader("Front-End-Https", "any"); _rule.setHeaderValue(null); _rule.matchAndApply("/",_request,_response); assertEquals("https",_request.getScheme()); } private void setRequestHeader(String header, String headerValue) { _requestHeaderFields.put(header, headerValue); } }