Package com.google.enterprise.connector.servlet

Source Code of com.google.enterprise.connector.servlet.GetConfigTest

// Copyright 2011 Google Inc.
//
// 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.google.enterprise.connector.servlet;

import com.google.enterprise.connector.common.StringUtils;
import com.google.enterprise.connector.instantiator.Configuration;
import com.google.enterprise.connector.manager.Context;
import com.google.enterprise.connector.manager.Manager;
import com.google.enterprise.connector.test.ConnectorTestUtils;

import junit.framework.TestCase;

import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;

import java.io.File;
import java.util.HashMap;
import java.util.logging.Logger;

/**
* Tests {@link GetConfig} Servlet.
*/
public class GetConfigTest extends TestCase {
  private static final Logger LOGGER =
      Logger.getLogger(GetConfigTest.class.getName());

  private static final String APPLICATION_CONTEXT =
      "testdata/contextTests/GetConfigTest.xml";
  private String connectorName = "connector1";
  private String connectorType = "TestConnectorA";
  private File connectorDir = new File(Context.DEFAULT_JUNIT_COMMON_DIR_PATH
      + "connectors/" + connectorType);
  private Manager manager;
  private MockHttpServletRequest req;
  private MockHttpServletResponse res;

  @Override
  protected void setUp() {
    // Clear out any old connector state files.
    ConnectorTestUtils.deleteAllFiles(connectorDir);

    // Create a stand alone context with real ProductionManager.
    Context.refresh();
    Context context = Context.getInstance();
    context.setStandaloneContext(APPLICATION_CONTEXT,
        Context.DEFAULT_JUNIT_COMMON_DIR_PATH);
    context.setFeeding(false);
    context.start();
    manager = context.getManager();

    req = new MockHttpServletRequest();
    res = new MockHttpServletResponse();
  }

  @Override
  protected void tearDown() {
    // Clear out any old connector state files.
    ConnectorTestUtils.deleteAllFiles(connectorDir);
  }

  private void addConnector() throws Exception {
    // Use the manager directly to create a connector.
    HashMap<String, String> configData = new HashMap<String, String>();
    configData.put("Username", "bob");
    configData.put("Password", "pwd");
    configData.put("Color", "red");
    configData.put("RepositoryFile", "MockRepositoryEventLog1.txt");
    manager.setConnectorConfiguration(connectorName,
        new Configuration(connectorType, configData, null),
        "en", false);
    manager.setSchedule(connectorName, "#connector1:200:300000:1-12");
  }

  private String expectedResult =
        "<Manager>\n"
      + "  <ManagerConfig>\n"
      + "    <Param name=\"googlePropertiesVersion\" value=\"3\"/>\n"
      + "  </ManagerConfig>\n"
      + "  <ManagerConfigXml name=\"GetConfigTest.xml\">\n\n"
      + "  </ManagerConfigXml>\n"
      + "  <ConnectorInstances>\n"
      + "    <ConnectorInstance>\n"
      + "      <ConnectorName>connector1</ConnectorName>\n"
      + "      <ConnectorSchedules version=\"3\">\n"
      + "        <disabled>true</disabled>\n"
      + "        <load>200</load>\n"
      + "        <RetryDelayMillis>300000</RetryDelayMillis>\n"
      + "        <TimeIntervals>1-12</TimeIntervals>\n"
      + "      </ConnectorSchedules>\n"
      + "      <ConnectorConfig>\n"
      + "        <Param name=\"Color\" value=\"red\"/>\n"
      + "        <Param name=\"Password\" value=\"\"/>\n"
      + "        <Param name=\"RepositoryFile\""
      + " value=\"MockRepositoryEventLog1.txt\"/>\n"
      + "        <Param name=\"Username\" value=\"bob\"/>\n"
      + "        <Param name=\"googlePropertiesVersion\" value=\"3\"/>\n"
      + "      </ConnectorConfig>\n"
      + "      <ConnectorConfigXml>\n\n"
      + "      </ConnectorConfigXml>\n"
      + "    </ConnectorInstance>\n"
      + "  </ConnectorInstances>\n"
      + "</Manager>\n";

  /**
   * Test with connector instance with Schedule.
   */
  public void testWithConnector() throws Exception {
    /* TODO bmj: We reverted GetConfig back to the ZIP file version.
       So this test is no longer meaningful.  It should be modified
       to test the returned ZIP file.  Commenting out for now.

    addConnector();
    new GetConfig().doGet(req, res);
    StringBuffer result = new StringBuffer(res.getContentAsString());
    ConnectorTestUtils.removeManagerVersion(result);

    // Remove the ConnectorType version.
    removeConnectorVersion(result, "TestConnectorA");

    // Drop the Connector Manager bean config.
    // But check it at least defines the Manager.
    removeCdata(result, "ProductionManager");

    // Drop the connectorInstance.xml, but make sure it
    // defines the connector instance.
    removeCdata(result, "TestConnectorAInstance");

    // Remove the encrypted password values.
    removePasswords(result);

    assertEquals(StringUtils.normalizeNewlines(expectedResult),
        StringUtils.normalizeNewlines(result.toString()));

    END TODO bmj */
  }

  /** Removes the ConnectorType, which may contain a  version string. */
  private void removeConnectorVersion(StringBuffer buffer, String checkStr) {
    removeAndCheck(buffer, "      <ConnectorType", ">\n", checkStr);
  }

  /**
   * Removes a CDATA block, but first verifies that it contains the
   * supplied string.
   */
  private void removeCdata(StringBuffer buffer, String checkStr) {
    removeAndCheck(buffer, ServletUtil.XML_CDATA_START,
                   ServletUtil.XML_CDATA_END, checkStr);
  }

  /**
   * Removes the specified block of text, identified by the start
   * and end strings, but verify that the check string is between them.
   */
  private void removeAndCheck(StringBuffer buffer, String startStr,
                              String endStr, String checkStr) {
    int start = buffer.indexOf(startStr);
    assertTrue(start >= 0);
    int stop = buffer.indexOf(endStr, start);
    assertTrue(stop > start);
    int match = buffer.indexOf(checkStr, start);
    assertTrue(match > start && match < stop);
    buffer.delete(start, stop + endStr.length());
  }

  /** Removes password values. */
  private void removePasswords(StringBuffer buffer) {
    String password = "assword\" value=\"";
    int start = 0;
    while ((start = buffer.indexOf(password, start)) >= 0) {
      int stop = buffer.indexOf("\"/>", start);
      buffer.delete(start + password.length(), stop);
      start += password.length();
    }
  }
}
TOP

Related Classes of com.google.enterprise.connector.servlet.GetConfigTest

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.