com.openmeap.admin.web.AdminTestHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.openmeap.admin.web.AdminTestHelper.java

Source

/*
 ###############################################################################
 #                                                                             #
 #    Copyright (C) 2011-2015 OpenMEAP, Inc.                                   #
 #    Credits to Jonathan Schang & Rob Thacher                                 #
 #                                                                             #
 #    Released under the LGPLv3                                                #
 #                                                                             #
 #    OpenMEAP is free software: you can redistribute it and/or modify         #
 #    it under the terms of the GNU Lesser General Public License as published #
 #    by the Free Software Foundation, either version 3 of the License, or     #
 #    (at your option) any later version.                                      #
 #                                                                             #
 #    OpenMEAP is distributed in the hope that it will be useful,              #
 #    but WITHOUT ANY WARRANTY; without even the implied warranty of           #
 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
 #    GNU Lesser General Public License for more details.                      #
 #                                                                             #
 #    You should have received a copy of the GNU Lesser General Public License #
 #    along with OpenMEAP.  If not, see <http://www.gnu.org/licenses/>.        #
 #                                                                             #
 ###############################################################################
 */

package com.openmeap.admin.web;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import com.openmeap.thirdparty.org.json.me.JSONException;
import com.openmeap.thirdparty.org.json.me.JSONObject;
import org.junit.Assert;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.openmeap.constants.FormConstants;
import com.openmeap.constants.UrlParamConstants;
import com.openmeap.event.ProcessingTargets;
import com.openmeap.http.FileHandlingHttpRequestExecuterImpl;
import com.openmeap.model.ModelManager;
import com.openmeap.model.dto.Application;
import com.openmeap.model.dto.ApplicationVersion;
import com.openmeap.model.dto.ClusterNode;
import com.openmeap.model.dto.Deployment;
import com.openmeap.model.dto.GlobalSettings;
import com.openmeap.protocol.dto.Result;
import com.openmeap.http.HttpRequestException;
import com.openmeap.http.HttpRequestExecuter;
import com.openmeap.http.HttpResponse;
import com.openmeap.json.JSONObjectBuilder;
import com.openmeap.util.StringUtilsTest;
import com.openmeap.util.UUID;
import com.openmeap.util.Utils;
import com.openmeap.web.form.ParameterMapBuilder;
import com.openmeap.web.form.ParameterMapBuilderException;

public class AdminTestHelper {

    final static public String ADMIN_HOST = "localhost:8080";
    final static public String NODE_HOST = "localhost:8080";

    final static public String ADMIN_USER = "tomcat";
    final static public String ADMIN_PASS = "tomcat";
    final static public String ADMIN_WEB_STORAGE = "/tmp";

    final static public String SERVICES_WEB_URL = "http://" + NODE_HOST + "/openmeap-services-web";
    final static public String SERVICES_WEB_AUTH_SALT = "auth-salt";

    final static public String NODE_01_SERVICES_URL = SERVICES_WEB_URL;
    final static public String NODE_01_STORAGE = "/tmp/archs";

    private String adminUrl = "http://" + ADMIN_HOST + "/openmeap-admin-web/interface/";

    final static public String APP_MGMT_WEB_URL = SERVICES_WEB_URL + "/application-management";

    private HttpRequestExecuter requestExecuter;
    private ParameterMapBuilder paramsBuilder;
    private ClassPathXmlApplicationContext persistenceBeans;

    public AdminTestHelper() {
        requestExecuter = (HttpRequestExecuter) new FileHandlingHttpRequestExecuterImpl();
        paramsBuilder = new ParameterMapBuilder();
    }

    public HttpRequestExecuter getRequestExecuter() {
        return requestExecuter;
    }

    public String getAdminUrl() {
        return adminUrl;
    }

    public void setAdminUrl(String url) {
        adminUrl = url;
    }

    public ModelManager getModelManager() {
        if (persistenceBeans == null) {
            persistenceBeans = new ClassPathXmlApplicationContext(
                    new String[] { "/META-INF/persistenceContext.xml", "/META-INF/test/persistenceContext.xml" });
        }
        return (ModelManager) persistenceBeans.getBean("modelManager");
    }

    /*
     * Login 
     */

    public HttpResponse getLogin() throws HttpRequestException {
        return requestExecuter.get(adminUrl);
    }

    public HttpResponse postLogin(String userName, String password) throws HttpRequestException {
        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put("j_username", userName);
        postData.put("j_password", password);
        return requestExecuter.postData(adminUrl + "j_security_check", postData);
    }

    /*
     * Connection open 
     */
    public Result getConnectionOpen(ApplicationVersion version, String slicVersion)
            throws HttpRequestException, IOException, JSONException {
        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(UrlParamConstants.ACTION, "connection-open-request");
        postData.put(UrlParamConstants.DEVICE_UUID, UUID.randomUUID());
        postData.put(UrlParamConstants.APP_NAME, version.getApplication().getName());
        postData.put(UrlParamConstants.APP_VERSION, version.getIdentifier());
        postData.put(UrlParamConstants.APPARCH_HASH, version.getArchive().getHash());
        postData.put(UrlParamConstants.SLIC_VERSION, slicVersion);
        HttpResponse response = requestExecuter.postData(APP_MGMT_WEB_URL, postData);

        String responseText = Utils.readInputStream(response.getResponseBody(), FormConstants.CHAR_ENC_DEFAULT);
        JSONObjectBuilder job = new JSONObjectBuilder();
        Result result = (Result) job.fromJSON(new JSONObject(responseText), new Result());
        return result;
    }

    /*
     * Application Add/Modify
     */

    public HttpResponse getAddModifyAppPage(Application application) throws HttpRequestException {
        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_APP_ADDMODIFY);
        if (application != null && application.getPk() != null) {
            getData.put(FormConstants.APP_ID, application.getPk().toString());
        }
        return requestExecuter.get(adminUrl, getData);
    }

    public HttpResponse postAddModifyApp(Application application)
            throws HttpRequestException, ParameterMapBuilderException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_APP_ADDMODIFY);
        if (application.getPk() != null) {
            getData.put(FormConstants.APP_ID, application.getPk().toString());
        }

        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(FormConstants.PROCESS_TARGET, ProcessingTargets.ADDMODIFY_APP);
        postData.put("submit", "true");
        postData.put("delete", "false");

        paramsBuilder.toParameters(postData, application);

        return requestExecuter.postData(adminUrl, getData, postData);
    }

    public HttpResponse postAddModifyApp_delete(Application application)
            throws HttpRequestException, ParameterMapBuilderException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_APP_ADDMODIFY);
        if (application.getPk() != null) {
            getData.put(FormConstants.APP_ID, application.getPk().toString());
        }

        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(FormConstants.PROCESS_TARGET, ProcessingTargets.ADDMODIFY_APP);
        postData.put("deleteConfirm", FormConstants.APP_DELETE_CONFIRM_TEXT);
        postData.put(FormConstants.DELETE, "Delete!");
        postData.put("submit", "false");
        postData.put("delete", "true");

        paramsBuilder.toParameters(postData, application);

        return requestExecuter.postData(adminUrl, getData, postData);
    }

    /*
     * APPLICATiON VERSIONs
     */

    public HttpResponse getAddModifyAppVer(Application application) throws HttpRequestException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_APPVER_ADDMODIFY);
        getData.put(FormConstants.APP_ID, application.getPk().toString());
        return requestExecuter.get(adminUrl, getData);
    }

    public HttpResponse postAddModifyAppVer(ApplicationVersion appVer, File uploadArchive)
            throws HttpRequestException, ParameterMapBuilderException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_APPVER_ADDMODIFY);
        getData.put(FormConstants.APP_ID, appVer.getApplication().getPk().toString());
        if (appVer.getPk() != null) {
            getData.put(FormConstants.APPVER_ID, appVer.getPk().toString());
        }

        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(FormConstants.PROCESS_TARGET, ProcessingTargets.ADDMODIFY_APPVER);
        postData.put(FormConstants.APP_ID, appVer.getApplication().getPk().toString());
        postData.put(FormConstants.UPLOAD_ARCHIVE, uploadArchive);
        paramsBuilder.toParameters(postData, appVer);

        return requestExecuter.postData(adminUrl, getData, postData);
    }

    public HttpResponse postAddModifyAppVer_delete(ApplicationVersion appVer)
            throws HttpRequestException, ParameterMapBuilderException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_APPVER_ADDMODIFY);
        getData.put(FormConstants.APP_ID, appVer.getApplication().getPk().toString());
        if (appVer.getPk() != null) {
            getData.put(FormConstants.APPVER_ID, appVer.getPk().toString());
        }

        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(FormConstants.PROCESS_TARGET, ProcessingTargets.ADDMODIFY_APPVER);
        postData.put(FormConstants.APP_ID, appVer.getApplication().getPk().toString());
        if (appVer.getPk() != null) {
            postData.put(FormConstants.APPVER_ID, appVer.getPk().toString());
        }
        paramsBuilder.toParameters(postData, appVer);
        postData.put("deleteConfirm", FormConstants.APPVER_DELETE_CONFIRM_TEXT);
        postData.put(FormConstants.DELETE, "Delete!");
        postData.put("Delete!", "Delete!");

        return requestExecuter.postData(adminUrl, getData, postData);
    }

    /*
     * DEPLOYMENTS
     */

    public HttpResponse postCreateDeployment(ApplicationVersion appVer, Deployment.Type deplType)
            throws HttpRequestException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_DEPLOYMENTS);
        getData.put(FormConstants.APP_ID, appVer.getApplication().getPk().toString());

        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(FormConstants.PROCESS_TARGET, ProcessingTargets.DEPLOYMENTS);
        postData.put(FormConstants.APPVER_ID, appVer.getPk().toString());
        postData.put(FormConstants.DEPLOYMENT_TYPE, deplType.toString());

        return requestExecuter.postData(adminUrl, getData, postData);
    }

    /*
     * GLOBAL SETTINGS
     */

    public HttpResponse getGlobalSettings() throws HttpRequestException {
        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_GLOBAL_SETTINGS);
        return requestExecuter.get(adminUrl, getData);
    }

    public HttpResponse postGlobalSettings(GlobalSettings settings)
            throws HttpRequestException, ParameterMapBuilderException {

        Hashtable<String, Object> getData = new Hashtable<String, Object>();
        getData.put(FormConstants.PAGE_BEAN, FormConstants.PAGE_BEAN_GLOBAL_SETTINGS);

        Hashtable<String, Object> postData = new Hashtable<String, Object>();
        postData.put(FormConstants.PROCESS_TARGET, ProcessingTargets.GLOBAL_SETTINGS);
        paramsBuilder.toParameters(postData, settings);
        if (settings.getClusterNodes() != null && !settings.getClusterNodes().isEmpty()) {
            List<String> nodeUrls = new ArrayList<String>();
            List<String> nodePaths = new ArrayList<String>();
            for (ClusterNode clusterNode : settings.getClusterNodes()) {
                nodeUrls.add(clusterNode.getServiceWebUrlPrefix());
                nodePaths.add(clusterNode.getFileSystemStoragePathPrefix());
            }
            postData.put("clusterNodeUrl", nodeUrls);
            postData.put("clusterNodePath", nodePaths);
        }

        return requestExecuter.postData(adminUrl, getData, postData);
    }

    /*
     * ASSERTION 
     */

    public void assertSame(Application app, Application dbApp) {
        Assert.assertEquals(app.getName(), dbApp.getName());
        Assert.assertEquals(app.getDescription(), dbApp.getDescription());
        Assert.assertEquals(app.getDeploymentHistoryLength(), dbApp.getDeploymentHistoryLength());
        Assert.assertEquals(app.getAdmins(), dbApp.getAdmins());
        Assert.assertEquals(app.getVersionAdmins(), dbApp.getVersionAdmins());
        Assert.assertEquals(app.getInitialVersionIdentifier(), dbApp.getInitialVersionIdentifier());
    }
}