/* * RHQ Management Platform * Copyright (C) 2005-2011 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.rhq.enterprise.server.sync.test; import static org.testng.Assert.assertEquals; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jmock.Expectations; import org.testng.annotations.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.rhq.core.domain.common.composite.SystemSettings; import org.rhq.core.domain.sync.ExporterMessages; import org.rhq.enterprise.server.sync.ExportingInputStream; import org.rhq.enterprise.server.sync.SynchronizationConstants; import org.rhq.enterprise.server.sync.Synchronizer; import org.rhq.enterprise.server.sync.SystemSettingsSynchronizer; import org.rhq.enterprise.server.system.SystemManagerLocal; import org.rhq.test.JMockTest; /** * * * @author Lukas Krejci */ @Test public class SystemSettingsExporterTest extends JMockTest { private static final Log LOG = LogFactory.getLog(MetricTemplateExporterTest.class); public void testCanExport() throws Exception { final SystemManagerLocal systemManager = context.mock(SystemManagerLocal.class); context.checking(new Expectations() { { allowing(systemManager).getObfuscatedSystemSettings(false); will(returnValue(getFakeSystemSettings())); } }); SystemSettingsSynchronizer exporter = new SystemSettingsSynchronizer(systemManager); Set<Synchronizer<?, ?>> exporters = new HashSet<Synchronizer<?, ?>>(); exporters.add(exporter); InputStream eis = new ExportingInputStream(exporters, new HashMap<String, ExporterMessages>(), 65536, false); // String exportContents = readAll(new InputStreamReader(eis, "UTF-8")); // // LOG.warn("Export contents:\n" + exportContents); // // eis = new ByteArrayInputStream(exportContents.getBytes("UTF-8")); // <?xml version="1.0" ?> // <configuration-export> // <entities id="org.rhq.enterprise.server.sync.importers.SystemSettingsImporter"> // <entity> // <data> // <systemSettings referencedEntityId="0"> // <entry key="CAM_BASE_URL">herethereandeverywhere</entry> // </systemSettings> // </data> // </entity> // </entities> // </configuration-export> DocumentBuilder bld = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = bld.parse(eis); Element root = doc.getDocumentElement(); Element entities = (Element) getFirstDirectChildByTagName(root, SynchronizationConstants.ENTITIES_EXPORT_ELEMENT); assertEquals(entities.getAttribute(SynchronizationConstants.ID_ATTRIBUTE), SystemSettingsSynchronizer.class.getName(), "Unexpected id of the entities element."); NodeList systemSettings = entities.getElementsByTagName("systemSettings"); assertEquals(systemSettings.getLength(), 1, "Unexpected number of exported system settings."); for (int i = 0; i < systemSettings.getLength(); ++i) { Element m = (Element) systemSettings.item(i); assertEquals(m.getAttribute("referencedEntityId"), "0", "Unexpected referencedEntityId value"); NodeList entries = m.getElementsByTagName("entry"); assertEquals(entries.getLength(), 1, "Unexpected number of entry elements in the system settings export."); Element baseURL = (Element) entries.item(0); assertEquals(baseURL.getAttribute("key"), "CAM_BASE_URL"); assertEquals(baseURL.getTextContent(), "herethereandeverywhere", "Unexpected value of CAM_BASE_URL"); } } private static String readAll(Reader rdr) throws IOException { try { StringBuilder bld = new StringBuilder(); int c; while ((c = rdr.read()) != -1) { bld.append((char) c); } return bld.toString(); } finally { rdr.close(); } } private static Node getFirstDirectChildByTagName(Node node, String tagName) { for (int i = 0; i < node.getChildNodes().getLength(); ++i) { Node n = node.getChildNodes().item(i); if (n.getNodeName().equals(tagName)) { return n; } } return null; } private static SystemSettings getFakeSystemSettings() { HashMap<String, String> values = new HashMap<String, String>(); values.put("CAM_BASE_URL", "herethereandeverywhere"); return SystemSettings.fromMap(values); } }