Package org.apache.oozie.servlet

Source Code of org.apache.oozie.servlet.TestJsonRestServlet

/**
* Copyright (c) 2010 Yahoo! Inc. 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. See accompanying LICENSE file.
*/
package org.apache.oozie.servlet;

import org.apache.oozie.test.EmbeddedServletContainer;
import org.apache.oozie.test.XTestCase;
import org.apache.oozie.service.Services;

import javax.servlet.http.HttpServletResponse;
import java.net.URL;
import java.net.HttpURLConnection;
import java.util.concurrent.Callable;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class TestJsonRestServlet extends XTestCase {

    static {
        new MyJsonRestServlet();
    }

    EmbeddedServletContainer container;

    private int invoke(String method, String resource, String queryString) throws Exception {
        return invoke(method, resource, queryString, "dummy");
    }

    private int invoke(String method, String resource, String queryString, String contentType) throws Exception {
        String s = container.getServletURL("/dummy");
        if (resource != null) {
            s += resource;
        }
        if (queryString != null) {
            s += "?" + queryString;
        }
        HttpURLConnection conn = (HttpURLConnection) new URL(s).openConnection();
        conn.setRequestProperty("content-type", contentType);
        conn.setRequestMethod(method);
        conn.connect();
        return conn.getResponseCode();
    }

    private String invokeAndGetResponse(String method, String resource, String queryString, String contentType)
            throws Exception {
        String s = container.getServletURL("/dummy");
        if (resource != null) {
            s += resource;
        }
        if (queryString != null) {
            s += "?" + queryString;
        }
        HttpURLConnection conn = (HttpURLConnection) new URL(s).openConnection();
        conn.setRequestProperty("content-type", contentType);
        conn.setRequestMethod(method);
        conn.connect();
        StringBuilder sb = new StringBuilder();
        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = reader.readLine();
        while (line != null) {
            sb.append(line);
            line = reader.readLine();
        }
        return sb.toString();
    }

    private void runTest(JsonRestServlet.ResourceInfo[] resourceInfo, Callable<Void> assertions) throws Exception {
        container = new EmbeddedServletContainer("test");
        Services services = new Services();
        try {
            services.init();
            MyJsonRestServlet.ACTIVE = resourceInfo;
            container.addServletEndpoint("/dummy/*", MyJsonRestServlet.class);
            container.start();
            assertions.call();
        }
        finally {
            container.stop();
            services.destroy();
        }
    }

    public void testEmptyResources() {
        try {
            MyJsonRestServlet.ACTIVE = MyJsonRestServlet.EMPTY;
            new MyJsonRestServlet();
            fail();
        }
        catch (IllegalArgumentException ex) {
            //nop
        }
    }

    public void testNoResourceNoParams() throws Exception {
        runTest(MyJsonRestServlet.NO_RESOURCE_NO_PARAMS, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", null, null));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", null));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "a=A"));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/", null));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "/hello", null));
                return null;
            }
        });
    }

    public void testParamsRequired() throws Exception {
        runTest(MyJsonRestServlet.PARAMS_REQUIRED, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "required=true"));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "required=true&optional=true"));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", "optional=true"));
                return null;
            }
        });
    }

    public void testParamTypes() throws Exception {
        runTest(MyJsonRestServlet.PARAM_TYPES, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "boolean=true"));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "boolean=false"));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", "boolean=x"));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "integer=1"));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", "integer=x"));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "string=a"));
                return null;
            }
        });
    }

    public void testResourceGetPostParamGet() throws Exception {
        runTest(MyJsonRestServlet.RESOURCE_GET_POST_PARAM_GET, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "param=true"));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "", "param=true"));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("POST", "", ""));
                return null;
            }
        });
    }

    public void testFixedResource() throws Exception {
        runTest(MyJsonRestServlet.FIXED_RESOURCE, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/resource", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/resource", ""));
                return null;
            }
        });
    }

    public void testWildCardResource() throws Exception {
        runTest(MyJsonRestServlet.WILDCARD_RESOURCE, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/any", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/any", ""));
                return null;
            }
        });
    }

    public void testInvalidResource() throws Exception {
        runTest(MyJsonRestServlet.WILDCARD_RESOURCE, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "/any/any", ""));
                return null;
            }
        });
    }


    public void testMultipleResources() throws Exception {
        runTest(MyJsonRestServlet.MULTIPLE_RESOURCES, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/resource1", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/resource1", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "/resource2", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("POST", "/resource2", ""));
                return null;
            }
        });
    }

    public void testMultipleResourcesNoResource() throws Exception {
        runTest(MyJsonRestServlet.MULTIPLE_RESOURCES_NO_RESOURCE, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/resource1", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/resource2", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("POST", "", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/resource1", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/resource2", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", ""));
                return null;
            }
        });
    }

    public void testMultipleResourcesWildCard() throws Exception {
        runTest(MyJsonRestServlet.MULTIPLE_RESOURCES_WILDCARD, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/resource1", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "/resource2", ""));
                assertEquals(HttpServletResponse.SC_OK, invoke("POST", "/any", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/resource1", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("POST", "/resource2", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "/any", ""));
                return null;
            }
        });
    }

    public void testContentTypeJsonCron() throws Exception {
        runTest(MyJsonRestServlet.CONTENT_TYPE_JSON_CRON_TEST, new Callable<Void>() {
            public Void call() throws Exception {
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "json=object", "application/xml"));
                assertEquals(HttpServletResponse.SC_OK, invoke("GET", "", "json=object", "application/xml; param=x"));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", "json=object", ""));
                assertEquals(HttpServletResponse.SC_BAD_REQUEST, invoke("GET", "", "json=object", "application/json"));
                String response = invokeAndGetResponse("GET", "", "json=object", "application/xml");
                assertTrue(response.contains("object"));
                response = invokeAndGetResponse("GET", "", "json=array", "application/xml");
                assertTrue(response.contains("array"));
                return null;
            }
        });
    }


}
TOP

Related Classes of org.apache.oozie.servlet.TestJsonRestServlet

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.