Package org.eclipse.orion.server.tests.servlets.site

Source Code of org.eclipse.orion.server.tests.servlets.site.CoreSiteTest

/*******************************************************************************
* Copyright (c) 2011, 2012 IBM Corporation and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.orion.server.tests.servlets.site;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URISyntaxException;

import org.eclipse.orion.internal.server.hosting.SiteConfigurationConstants;
import org.eclipse.orion.server.core.IOUtilities;
import org.eclipse.orion.server.core.ProtocolConstants;
import org.eclipse.orion.server.tests.servlets.files.FileSystemTest;
import org.eclipse.orion.server.tests.servlets.internal.DeleteMethodWebRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xml.sax.SAXException;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.PutMethodWebRequest;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;

/**
* Abstract base class for site and hosting tests.
*/
public abstract class CoreSiteTest extends FileSystemTest {

  public static final String SITE_SERVLET_LOCATION = "site" + '/';
  public static final String SITE_CONFIG_PREF_NODE = "SiteConfigurations";

  /**
   * Turns a Java array-of-arrays {{"/foo","/A"},{"/bar","/B"}} into a mappings array
   * [{Source:"/foo", Target:"/A"}, {Source:"/bar", Target:"/B"}]
   * @param mappings Array where each element is a String[] of the form {Source,Target}
   */
  protected static JSONArray makeMappings(String[]... mappings) throws JSONException {
    JSONArray result = new JSONArray();
    for (String[] mapping : mappings) {
      if (mapping.length != 2)
        throw new IllegalArgumentException("Not a valid mapping: " + mapping);

      JSONObject mappingObject = new JSONObject();
      mappingObject.put(SiteConfigurationConstants.KEY_SOURCE, mapping[0]);
      mappingObject.put(SiteConfigurationConstants.KEY_TARGET, mapping[1]);
      result.put(mappingObject);
    }
    return result;
  }

  /**
   * Creates a site and asserts that it was created.
   * @param mappings Can be null
   * @param hostHint Can be null
   * @param user If nonnull, string to use as username and password for auth
   */
  protected WebResponse createSite(String name, String workspaceId, JSONArray mappings, String hostHint, String user) throws IOException, SAXException {
    WebRequest request = getCreateSiteRequest(name, workspaceId, mappings, hostHint);
    if (user == null)
      setAuthentication(request);
    else
      setAuthentication(request, user, user);
    WebResponse response = webConversation.getResponse(request);
    assertEquals(HttpURLConnection.HTTP_CREATED, response.getResponseCode());
    return response;
  }

  /**
   * Returns a request that can create a site.
   * @param name
   * @param workspaceId
   * @param mappings Can be null
   * @param hostHint Can be null
   */
  protected WebRequest getCreateSiteRequest(String name, String workspaceId, JSONArray mappings, String hostHint) {
    try {
      String requestURI = SERVER_LOCATION + SITE_SERVLET_LOCATION;
      JSONObject json = new JSONObject();
      json.put(SiteConfigurationConstants.KEY_WORKSPACE, workspaceId);
      if (mappings != null)
        json.put(SiteConfigurationConstants.KEY_MAPPINGS, mappings);
      if (hostHint != null)
        json.put(SiteConfigurationConstants.KEY_HOST_HINT, hostHint);
      WebRequest request = new PostMethodWebRequest(requestURI, IOUtilities.toInputStream(json.toString()), "application/json");
      request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1");
      request.setHeaderField(ProtocolConstants.HEADER_SLUG, name); // Put name in Slug
      setAuthentication(request);
      return request;
    } catch (UnsupportedEncodingException e) {
      fail(e.getMessage());
    } catch (JSONException e) {
      fail(e.getMessage());
    }
    return null;
  }

  /**
   * @param locationUri
   * @return Returns a request that will DELETE the site at the given URI.
   * @throws URISyntaxException
   */
  protected WebRequest getDeleteSiteRequest(String locationUri) throws URISyntaxException {
    WebRequest request = new DeleteMethodWebRequest(toAbsoluteURI(locationUri));
    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1");
    setAuthentication(request);
    return request;
  }

  /**
   * @param locationUri
   * @param user If nonnull, value to use as username and password for auth.
   * @return Returns a request that will GET the site at the given URI.
   * @throws URISyntaxException
   */
  protected WebRequest getRetrieveSiteRequest(String locationUri, String user) throws URISyntaxException {
    WebRequest request = new GetMethodWebRequest(toAbsoluteURI(locationUri));
    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1");
    if (user == null)
      setAuthentication(request);
    else
      setAuthentication(request, user, user);
    return request;
  }

  protected WebRequest getRetrieveAllSitesRequest(String user) {
    WebRequest request = new GetMethodWebRequest(toAbsoluteURI(SITE_SERVLET_LOCATION));
    request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1");
    if (user == null)
      setAuthentication(request);
    else
      setAuthentication(request, user, user);
    return request;
  }

  /**
   * Returns a request that can update a site.
   * @param name
   * @param workspaceId
   * @param mappings Can be null
   * @param hostHint Can be null
   * @param hostingStatus Can be null
   * @throws URISyntaxException
   */
  protected WebRequest getUpdateSiteRequest(String locationUri, String name, String workspaceId, JSONArray mappings, String hostHint, JSONObject hostingStatus) throws URISyntaxException {
    try {
      JSONObject json = new JSONObject();
      json.put(ProtocolConstants.KEY_NAME, name);
      json.put(SiteConfigurationConstants.KEY_WORKSPACE, workspaceId);
      json.putOpt(SiteConfigurationConstants.KEY_MAPPINGS, mappings);
      json.putOpt(SiteConfigurationConstants.KEY_HOST_HINT, hostHint);
      json.putOpt(SiteConfigurationConstants.KEY_HOSTING_STATUS, hostingStatus);
      WebRequest request = new PutMethodWebRequest(toAbsoluteURI(locationUri), IOUtilities.toInputStream(json.toString()), "application/json");
      request.setHeaderField(ProtocolConstants.HEADER_ORION_VERSION, "1");
      setAuthentication(request);
      return request;
    } catch (UnsupportedEncodingException e) {
      fail(e.getMessage());
    } catch (JSONException e) {
      fail(e.getMessage());
    }
    return null;
  }
}
TOP

Related Classes of org.eclipse.orion.server.tests.servlets.site.CoreSiteTest

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.