// Copyright 2006-2008 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.manager.ConnectorStatus;
import com.google.enterprise.connector.manager.Manager;
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.logging.Logger;
/**
* Tests the GetConnectorStatus servlet class
*
*/
public class GetConnectorStatusTest extends TestCase {
private static final Logger LOGGER =
Logger.getLogger(GetConnectorStatusTest.class.getName());
/**
* Test method for {@link com.google.enterprise.connector.servlet.GetConnectorStatus
* #handleDoGet(String, Manager, PrintWriter)}.
*
* connectorStatus = null
*/
public void testHandleDoGet2() {
String name = null;
int status = 0;
doTestStatus(name, status);
}
public void testHandleDoGet3() {
String name = "connectorName";
int status = 0;
doTestStatus(name, status);
}
public void testHandleDoGet4() {
String name = "";
int status = 0;
doTestStatus(name, status);
}
public void testHandleDoGet5() {
String name = "connectorName";
int status = 0;
doTestStatus(name, status);
}
private void doTestStatus(String name, int status) {
String type = "Documentum";
String expectedResult =
"<CmResponse>\n" +
" <StatusId>0</StatusId>\n" +
" <ConnectorStatus>\n" +
" <ConnectorName>" + name + "</ConnectorName>\n" +
" <ConnectorType>" + type + "</ConnectorType>\n" +
" <Status>" + Integer.toString(status) + "</Status>\n" +
" <ConnectorSchedules version=\"3\">" + name + ":100:0:0-0</ConnectorSchedules>\n" +
" </ConnectorStatus>\n" +
"</CmResponse>\n";
doTest(MockManager.getInstance(), name, expectedResult);
}
private void doTest(Manager manager, String connectorName,
String expectedResult) {
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
GetConnectorStatus.handleDoGet(connectorName, manager, out);
out.flush();
String result = writer.toString();
out.close();
LOGGER.info("Expected Response:\n" + expectedResult);
LOGGER.info("Actual Response:\n" + result);
assertEquals(StringUtils.normalizeNewlines(expectedResult),
StringUtils.normalizeNewlines(result));
}
/** Test manager throws ConnectorNotFoundException. */
public void testConnectorNotFound() {
String name = "NonExistentConnector";
String expectedResult = "<CmResponse>\n"
+ " <StatusId>"
+ ConnectorMessageCode.EXCEPTION_CONNECTOR_NOT_FOUND
+ "</StatusId>\n"
+ " <CMParams Order=\"0\" CMParam=\"" + name + "\"/>\n"
+ "</CmResponse>\n";
doTest(new ConnectorNotFoundManager(), name, expectedResult);
}
/** A Manager that throws ConnectorNotFoundException. */
private static class ConnectorNotFoundManager extends MockManager {
@Override
public ConnectorStatus getConnectorStatus(String connectorName)
throws ConnectorNotFoundException {
throw new ConnectorNotFoundException("Not found: " + connectorName);
}
}
/** Test manager returns null ConnectorStatus. */
public void testNullConnectorStatus() {
String name = "nullStatusConnector";
String expectedResult = "<CmResponse>\n"
+ " <StatusId>"
+ ConnectorMessageCode.RESPONSE_NULL_CONNECTOR_STATUS
+ "</StatusId>\n"
+ " <CMParams Order=\"0\" CMParam=\"" + name + "\"/>\n"
+ "</CmResponse>\n";
doTest(new NullStatusManager(), name, expectedResult);
}
/** A Manager that returns null ConnectorStatus. */
private static class NullStatusManager extends MockManager {
@Override
public ConnectorStatus getConnectorStatus(String connectorName) {
return null;
}
}
/** Test manager returns ConnectorStatus with null Schedule. */
public void testNullConnectorSchedule() {
String name = "foo";
String type = "Documentum";
String expectedResult =
"<CmResponse>\n" +
" <StatusId>0</StatusId>\n" +
" <ConnectorStatus>\n" +
" <ConnectorName>" + name + "</ConnectorName>\n" +
" <ConnectorType>" + type + "</ConnectorType>\n" +
" <Status>0</Status>\n" +
" <ConnectorSchedules></ConnectorSchedules>\n" +
" </ConnectorStatus>\n" +
"</CmResponse>\n";
doTest(new NullScheduleManager(), name, expectedResult);
}
/** A Manager that returns null ConnectorStatus. */
private static class NullScheduleManager extends MockManager {
@Override
public ConnectorStatus getConnectorStatus(String connectorName)
throws ConnectorNotFoundException {
ConnectorStatus status = super.getConnectorStatus(connectorName);
return new ConnectorStatus(status.getName(), status.getType(),
status.getStatus(), null, null, null);
}
}
}