// Copyright 2011 Google 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.
package com.google.enterprise.connector.servlet;
import com.google.enterprise.connector.common.StringUtils;
import com.google.enterprise.connector.instantiator.InstantiatorException;
import com.google.enterprise.connector.manager.MockManager;
import com.google.enterprise.connector.persist.ConnectorNotFoundException;
import junit.framework.TestCase;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
/**
* Tests RestartConnectorTraversal servlet class.
*/
public class RestartConnectorTraversalTest extends TestCase {
/** Test method for {@link RestartConnectorTraversal#handleDoGet}. */
public void testHandleDoGet() {
checkHandleDoGet("connector1",
ConnectorMessageCode.SUCCESS_RESTART_TRAVERSAL, true);
}
/** Test ConnectorNotFoundException. */
public void testConnectorNotFoundException() {
checkHandleDoGet("UnknownConnector",
ConnectorMessageCode.EXCEPTION_CONNECTOR_NOT_FOUND, false);
}
/** Test InstantiatorException. */
public void testInstantiatorException() {
checkHandleDoGet("BrokenConnector",
ConnectorMessageCode.EXCEPTION_INSTANTIATOR, false);
}
private void checkHandleDoGet(String connectorName, int expectedCode,
boolean shouldRestart) {
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
RestartTraversalManager manager = new RestartTraversalManager();
RestartConnectorTraversal.handleDoGet(connectorName, manager, out);
out.flush();
String result = StringUtils.normalizeNewlines(writer.toString());
out.close();
String expectedResult = expectedResult(connectorName, expectedCode);
System.out.println("\n=============================\n");
System.out.println("Test: " + getName());
System.out.println("Expected Response:\n" + expectedResult);
System.out.println("Actual Response:\n" + result);
assertEquals(expectedResult, result);
assertEquals(shouldRestart, manager.didRestartTraversal(connectorName));
}
/** Build the expected result string. */
private String expectedResult(String connectorName, int code) {
String expected = "<CmResponse>\n <StatusId>" + code + "</StatusId>\n"
+ " <CMParams Order=\"0\" CMParam=\"" + connectorName + "\"/>\n"
+ "</CmResponse>\n";
return StringUtils.normalizeNewlines(expected);
}
private static class RestartTraversalManager extends MockManager {
private HashMap<String, Boolean> restarts = new HashMap<String, Boolean>();
@Override
public void restartConnectorTraversal(String connectorName)
throws ConnectorNotFoundException, InstantiatorException {
if ("UnknownConnector".equals(connectorName)) {
throw new ConnectorNotFoundException(connectorName);
} else if ("BrokenConnector".equals(connectorName)) {
throw new InstantiatorException(connectorName);
}
restarts.put(connectorName, Boolean.TRUE);
}
boolean didRestartTraversal(String connectorName) {
return Boolean.TRUE.equals(restarts.get(connectorName));
}
}
}