/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.service.requestcontext.rewrite.impl;
import static com.alibaba.citrus.service.requestcontext.rewrite.impl.RewriteUtil.*;
import static org.junit.Assert.*;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.citrus.service.requestcontext.AbstractRequestContextsTests;
import com.alibaba.citrus.service.requestcontext.rewrite.RewriteRequestContext;
import org.junit.BeforeClass;
import org.junit.Test;
public class RewriteUtilTests extends AbstractRequestContextsTests<RewriteRequestContext> {
@BeforeClass
public static void initFactory() {
createBeanFactory("services-rewrite.xml");
}
@Test
public void _eval() throws Exception {
invokeNoopServlet("/servlet/hello.htm?a=1&b=2&c=3&e=%5C$12%2534");
initRequestContext();
HttpServletRequest wrappedRequest = requestContext.getWrappedRequestContext().getRequest();
// =====================================================
// Client side of the IP connection
// =====================================================
assertEquals("localhost", eval("%{REMOTE_HOST}", wrappedRequest));
assertEquals("127.0.0.1", eval("%{REMOTE_ADDR}", wrappedRequest));
assertEquals("", eval("%{REMOTE_USER}", wrappedRequest));
assertEquals("GET", eval("%{REQUEST_METHOD}", wrappedRequest));
assertEquals("a=1&b=2&c=3&e=\\%5C\\$12\\%2534", eval("%{QUERY_STRING}", wrappedRequest));
assertEquals("1", eval("%{QUERY:a}", wrappedRequest));
assertEquals("2", eval("%{QUERY:b}", wrappedRequest));
assertEquals("", eval("%{QUERY:d}", wrappedRequest));
assertEquals("", eval("%{AUTH_TYPE}", wrappedRequest));
// =====================================================
// HTTP layer details extracted from HTTP headers
// =====================================================
assertEquals("www.taobao.com", eval("%{SERVER_NAME}", wrappedRequest));
assertEquals("80", eval("%{SERVER_PORT}", wrappedRequest));
assertEquals("HTTP/1.1", eval("%{SERVER_PROTOCOL}", wrappedRequest));
// =====================================================
// HTTP headers
// =====================================================
assertTrue(eval("%{HTTP_USER_AGENT}", wrappedRequest).contains("httpunit"));
assertEquals("", eval("%{HTTP_REFERER}", wrappedRequest));
assertEquals("", eval("%{HTTP_HOST}", wrappedRequest));
assertEquals("", eval("%{HTTP_ACCEPT}", wrappedRequest));
assertEquals("", eval("%{HTTP_COOKIE}", wrappedRequest));
// =====================================================
// Others
// =====================================================
assertEquals("/servlet/hello.htm", eval("%{REQUEST_URI}", wrappedRequest));
// =====================================================
// Special cases
// =====================================================
assertEquals("", eval("", wrappedRequest));
assertEquals("\\%{}", eval("%{}", wrappedRequest));
assertEquals("%{", eval("%{", wrappedRequest));
assertEquals("\\%{} %", eval("%{} %", wrappedRequest));
assertEquals("\\%{INVALID} %{HTTP_HOST} %1 %{INCOMPLETED", eval("%{INVALID} %%{HTTP_HOST} %1 %{INCOMPLETED", wrappedRequest));
assertEquals("$1 \\\\\\$12\\%34 %2", eval("$1 %{QUERY:e} %2", wrappedRequest));
}
}