// Copyright 2010 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.importexport; import com.google.enterprise.connector.common.StringUtils; import com.google.enterprise.connector.instantiator.Configuration; import com.google.enterprise.connector.scheduler.Schedule; import com.google.enterprise.connector.util.SAXParseErrorHandler; import com.google.enterprise.connector.util.XmlParseUtil; import junit.framework.TestCase; import org.w3c.dom.Document; import java.util.Map; public class LegacyImportExportConnectorTest extends TestCase { private static final String OLD_FORMAT = "<ConnectorInstance>\n" + " <ConnectorName>connector-01</ConnectorName>\n" + " <ConnectorType>TestConnector</ConnectorType>\n" + " <ConnectorSchedule>connector-01:100:0-0</ConnectorSchedule>\n" + " <ConnectorConfig>\n" + " <Param name=\"color\" value=\"red\"/>\n" + " <Param name=\"password\" value=\"pwd\"/>\n" + " <Param name=\"username\" value=\"name\"/>\n" + " </ConnectorConfig>\n" + "</ConnectorInstance>\n"; // Test reading Legacy GSA Export format. (old Schedule format) public final void testReadOldFormatSchedule() { ImportExportConnector connector = fromXmlString(OLD_FORMAT); assertEquals("name", "connector-01", connector.getName()); assertEquals("type", "TestConnector", connector.getTypeName()); assertEquals("schedule", "connector-01:100:300000:0-0", connector.getScheduleString()); Map<String, String> config = connector.getConfigMap(); ImportExportConnectorTest.assertContains(config, "username", "name"); ImportExportConnectorTest.assertContains(config, "password", "pwd"); ImportExportConnectorTest.assertContains(config, "color", "red"); assertTrue(config.size() == 0); assertNull("configXml", connector.getConfigXml()); assertNull("checkpoint", connector.getCheckpoint()); } // Test reading New GSA Export format. (modern Schedule format) public final void testReadNewFormatSchedule() { ImportExportConnector connector = fromXmlString(ImportExportConnectorTest.NEW_FORMAT_WITH_SCHEDULE); assertEquals("name", "connector-02", connector.getName()); assertEquals("type", "TestConnector", connector.getTypeName()); assertEquals("schedule", "connector-02:100:300000:0-0", connector.getScheduleString()); Map<String, String> config = connector.getConfigMap(); ImportExportConnectorTest.assertContains(config, "username", "name"); ImportExportConnectorTest.assertContains(config, "password", "pwd"); ImportExportConnectorTest.assertContains(config, "color", "red"); assertTrue(config.size() == 0); assertNull("configXml", connector.getConfigXml()); assertNull("checkpoint", connector.getCheckpoint()); } // Test reading a missing schedule. public final void testReadNullSchedule() { ImportExportConnector connector = fromXmlString(ImportExportConnectorTest.NEW_FORMAT_NULL_SCHEDULE); assertEquals("name", "connector-01", connector.getName()); assertEquals("type", "TestConnector", connector.getTypeName()); assertNull("schedule", connector.getSchedule()); Map<String, String> config = connector.getConfigMap(); ImportExportConnectorTest.assertContains(config, "username", "name"); ImportExportConnectorTest.assertContains(config, "password", "pwd"); ImportExportConnectorTest.assertContains(config, "color", "red"); assertTrue(config.size() == 0); assertNull("configXml", connector.getConfigXml()); assertNull("checkpoint", connector.getCheckpoint()); } // Test reading an empty schedule. public final void testReadEmptySchedule() { ImportExportConnector connector = fromXmlString(ImportExportConnectorTest.NEW_FORMAT_EMPTY_SCHEDULE); assertEquals("name", "connector-01", connector.getName()); assertEquals("type", "TestConnector", connector.getTypeName()); assertNull("schedule", connector.getSchedule()); Map<String, String> config = connector.getConfigMap(); ImportExportConnectorTest.assertContains(config, "username", "name"); ImportExportConnectorTest.assertContains(config, "password", "pwd"); ImportExportConnectorTest.assertContains(config, "color", "red"); assertTrue(config.size() == 0); assertNull("configXml", connector.getConfigXml()); assertNull("checkpoint", connector.getCheckpoint()); } // Test reading checkpoint should return null. public final void testReadCheckpoint() { ImportExportConnector connector = fromXmlString(ImportExportConnectorTest.NEW_FORMAT_WITH_CHECKPOINT); assertEquals("name", "connector-02", connector.getName()); assertEquals("type", "TestConnector", connector.getTypeName()); assertEquals("schedule", "connector-02:100:300000:0-0", connector.getScheduleString()); Map<String, String> config = connector.getConfigMap(); ImportExportConnectorTest.assertContains(config, "username", "name"); ImportExportConnectorTest.assertContains(config, "password", "pwd"); ImportExportConnectorTest.assertContains(config, "color", "red"); assertTrue(config.size() == 0); assertNull("checkpoint", connector.getCheckpoint()); assertNull("configXml", connector.getConfigXml()); } // Test Writing an null schedule generates an empty schedule element. public final void testWriteEmptySchedule() { ImportExportConnector connector = new LegacyImportExportConnector( "connector-01", new Configuration("TestConnector", ImportExportConnectorTest.CONFIG_MAP, null), null, null); String xmlResult = ImportExportConnectorTest.asXmlString(connector); assertEquals(ImportExportConnectorTest.NEW_FORMAT_EMPTY_SCHEDULE, StringUtils.normalizeNewlines(xmlResult)); } // Test that schedules are written in new format. public final void testWriteNewSchedule() { Schedule schedule = new Schedule("connector-02", false, 100, 300000, "0-0"); ImportExportConnector connector = new LegacyImportExportConnector( "connector-02", new Configuration("TestConnector", ImportExportConnectorTest.CONFIG_MAP, null), schedule, null); String xmlResult = ImportExportConnectorTest.asXmlString(connector); assertEquals(ImportExportConnectorTest.NEW_FORMAT_WITH_SCHEDULE, StringUtils.normalizeNewlines(xmlResult)); } // Test that checkpoints are not included in the output. public final void testWriteCheckpoint() { Schedule schedule = new Schedule("connector-02", false, 100, 300000, "0-0"); ImportExportConnector connector = new LegacyImportExportConnector( "connector-02", new Configuration("TestConnector", ImportExportConnectorTest.CONFIG_MAP, null), schedule, "checkpoint"); String xmlResult = ImportExportConnectorTest.asXmlString(connector); assertEquals(ImportExportConnectorTest.NEW_FORMAT_WITH_SCHEDULE, StringUtils.normalizeNewlines(xmlResult)); } private ImportExportConnector fromXmlString(String xmlString) { Document document = XmlParseUtil.parse(xmlString, new SAXParseErrorHandler(), XmlParseUtil.nonEntityResolver); ImportExportConnector connector = new LegacyImportExportConnector(); connector.fromXml(document.getDocumentElement()); return connector; } }