Package com.alibaba.citrus.util.internal.webpagelite.myprocessor

Source Code of com.alibaba.citrus.util.internal.webpagelite.myprocessor.LastModifiedTests

/*
* 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.util.internal.webpagelite.myprocessor;

import static com.alibaba.citrus.util.CollectionUtil.*;
import static com.alibaba.citrus.util.StringUtil.*;
import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import com.alibaba.citrus.util.internal.webpagelite.RequestProcessor;
import com.alibaba.citrus.util.internal.webpagelite.ServletRequestContext;
import com.meterware.httpunit.WebResponse;
import com.meterware.servletunit.InvocationContext;
import com.meterware.servletunit.ServletRunner;
import com.meterware.servletunit.ServletUnitClient;
import org.junit.Before;
import org.junit.Test;

public class LastModifiedTests {
    private SimpleDateFormat    fmt;
    private ServletUnitClient   client;
    private InvocationContext   invocationContext;
    private HttpServletRequest  request;
    private HttpServletResponse response;
    private ServletContext      servletContext;
    private Map<String, String> textResources;
    private MyProcessor         page;

    @Before
    public void init() throws Exception {
        fmt = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
        fmt.setTimeZone(TimeZone.getTimeZone("GMT"));

        ServletRunner servletRunner = new ServletRunner();
        servletRunner.registerServlet("/myservlet/*", MyServlet.class.getName());

        client = servletRunner.newClient();
        client.setExceptionsThrownOnErrorStatus(false);
        client.getClientProperties().setAutoRedirect(false);

        invocationContext = client.newInvocation("http://localhost/myservlet");

        request = invocationContext.getRequest();

        // http unit在这里有个可耻的错误,HH:mm:ss写成了hh:mm:ss,导致日期错误。
        response = new HttpServletResponseWrapper(invocationContext.getResponse()) {
            @Override
            public void setDateHeader(String name, long date) {
                super.setHeader(name, fmt.format(new Date(date)));
            }
        };
        servletContext = invocationContext.getServlet().getServletConfig().getServletContext();

        textResources = createHashMap();

        textResources.put("file1", "file1 content");
        textResources.put("path/to/", "list");
        textResources.put("path/to/file2", "file2 content");

        page = new MyProcessor();
    }

    @Test
    public void lastModifiedResource() throws Exception {
        page.processRequest(getRequestContext("/dummy.txt"));

        assertEquals(new File(getClass().getResource("dummy.txt").toURI()).lastModified() / 1000 * 1000,
                     getResponseLastModified());

        page.processRequest(getRequestContext("/prototype.js"));

        assertEquals(new File(RequestProcessor.class.getResource("prototype.js").toURI()).lastModified() / 1000 * 1000,
                     getResponseLastModified());
    }

    @Test
    public void lastModifiedResourceTemplate() throws Exception {
        page.processRequest(getRequestContext("/style.txt"));
        assertEquals(-1, getResponseLastModified());
    }

    @Test
    public void lastModifiedListRedirect() throws Exception {
        page.processRequest(getRequestContext("/path/to"));
        assertEquals(-1, getResponseLastModified());
    }

    @Test
    public void lastModifiedRenderList() throws Exception {
        page.processRequest(getRequestContext("/path/to/"));
        assertEquals(-1, getResponseLastModified());
    }

    @Test
    public void lastModifiedNotFound() throws Exception {
        page.processRequest(getRequestContext("/path/to/notFound"));
        assertEquals(-1, getResponseLastModified());
    }

    private ServletRequestContext getRequestContext(String name) {
        return new ServletRequestContext(request, response, servletContext, "http://localhost/myservlet", name) {
        };
    }

    private long getResponseLastModified() throws Exception {
        WebResponse webResponse = client.getResponse(invocationContext);
        String lastModifiedStr = trimToNull(webResponse.getHeaderField("last-modified"));

        if (lastModifiedStr == null) {
            return -1;
        } else {
            return fmt.parse(lastModifiedStr).getTime();
        }
    }

    private class MyProcessor extends RequestProcessor<ServletRequestContext> {
        @Override
        protected void renderPage(ServletRequestContext request, String resourceName) throws IOException {
            PrintWriter out = request.getWriter("text/plain");
            out.println(textResources.get(resourceName));
        }

        @Override
        protected boolean resourceExists(String resourceName) {
            return textResources.containsKey(resourceName);
        }
    }

    public static class MyServlet extends HttpServlet {
        private static final long serialVersionUID = 4555315413735967231L;
    }
}
TOP

Related Classes of com.alibaba.citrus.util.internal.webpagelite.myprocessor.LastModifiedTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.