blob: 982942b887e972d554ac5cc3502264350d471c09 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2018 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.tests.internal.registry;
import java.io.*;
import java.net.URL;
import junit.framework.TestCase;
import org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI;
import org.eclipse.core.runtime.*;
import org.eclipse.core.tests.runtime.RuntimeTestsPlugin;
/**
* Test proper clean-up in case registry gets invalid XML contribution.
* @since 3.4
*/
public class InputErrorTest extends TestCase {
static private final String DATA_LOCATION = "Plugin_Testing/registry/errorHandling/";
/**
* Use customized registry strategy to both check error processing
* and to remove expected error messages from test log.
*/
private class RegistryStrategyLog extends RegistryStrategyOSGI {
public String msg = null;
public RegistryStrategyLog(File[] theStorageDir, boolean[] cacheReadOnly, Object key) {
super(theStorageDir, cacheReadOnly, key);
}
@Override
public void log(IStatus status) {
msg = status.getMessage();
}
}
public InputErrorTest() {
super();
}
public InputErrorTest(String name) {
super(name);
}
private InputStream getStream(String location) {
URL xml = RuntimeTestsPlugin.getContext().getBundle().getEntry(DATA_LOCATION + location);
assertNotNull(xml);
try {
return new BufferedInputStream(xml.openStream());
} catch (IOException ex) {
fail("Unable to open input stream to XML");
}
return null;
}
public void testErrorCleanupPoints() {
RegistryStrategyLog strategy = new RegistryStrategyLog(null, null, null); // RegistryFactory.createOSGiStrategy(null, null, null);
IExtensionRegistry localRegistry = RegistryFactory.createRegistry(strategy, null, null);
IContributor contributor = ContributorFactorySimple.createContributor("testErrorHandling");
// 1) attempt to add information from mis-formed XML
InputStream is = getStream("bad/point/plugin.xml");
assertNotNull(is);
boolean added = localRegistry.addContribution(is, contributor, false, "test", null, null);
assertFalse(added);
IExtensionPoint bundleExtPointA = localRegistry.getExtensionPoint("testErrorHandling.xptErrorTestA");
assertNull(bundleExtPointA);
IExtensionPoint bundleExtPointB = localRegistry.getExtensionPoint("testErrorHandling.xptErrorTestB");
assertNull(bundleExtPointB);
assertNotNull(strategy.msg);
strategy.msg = null;
// 2) add properly formed XML
is = getStream("good/point/plugin.xml");
assertNotNull(is);
added = localRegistry.addContribution(is, contributor, false, "test", null, null);
assertTrue(added);
bundleExtPointA = localRegistry.getExtensionPoint("testErrorHandling.xptErrorTestA");
assertNotNull(bundleExtPointA);
bundleExtPointB = localRegistry.getExtensionPoint("testErrorHandling.xptErrorTestB");
assertNotNull(bundleExtPointB);
assertNull(strategy.msg);
localRegistry.stop(null);
}
public void testErrorCleanupExtensions() {
RegistryStrategyLog strategy = new RegistryStrategyLog(null, null, null); // RegistryFactory.createOSGiStrategy(null, null, null);
IExtensionRegistry localRegistry = RegistryFactory.createRegistry(strategy, null, null);
IContributor contributor = ContributorFactorySimple.createContributor("testErrorHandling");
// 1) attempt to add information from mis-formed XML
InputStream is = getStream("bad/extension/plugin.xml");
assertNotNull(is);
boolean added = localRegistry.addContribution(is, contributor, false, "test", null, null);
assertFalse(added);
IExtensionPoint bundleExtPointA = localRegistry.getExtensionPoint("testErrorHandling.xptErrorTestA");
assertNull(bundleExtPointA);
IExtension extensionA = localRegistry.getExtension("testErrorHandling.testExtA");
assertNull(extensionA);
IExtension extensionB = localRegistry.getExtension("testErrorHandling.testExtB");
assertNull(extensionB);
IExtension extensionC = localRegistry.getExtension("testErrorHandling.testExtC");
assertNull(extensionC);
assertNotNull(strategy.msg);
strategy.msg = null;
// 2) add properly formed XML
is = getStream("good/extension/plugin.xml");
assertNotNull(is);
added = localRegistry.addContribution(is, contributor, false, "test", null, null);
assertTrue(added);
bundleExtPointA = localRegistry.getExtensionPoint("testErrorHandling.xptErrorTestA");
assertNotNull(bundleExtPointA);
checkExtension(localRegistry, "testErrorHandling.testExtA", "valueGoodA");
checkExtension(localRegistry, "testErrorHandling.testExtB", "valueGoodB");
checkExtension(localRegistry, "testErrorHandling.testExtC", "valueGoodC");
assertNull(strategy.msg);
localRegistry.stop(null);
}
private void checkExtension(IExtensionRegistry registry, String extID, String expectedValue) {
IExtension extensionA = registry.getExtension(extID);
assertNotNull(extensionA);
IConfigurationElement[] configElements = extensionA.getConfigurationElements();
assertTrue(configElements.length == 1);
String value = configElements[0].getAttribute("testAttr");
assertTrue(expectedValue.equals(value));
}
}