blob: bf986cd3ecff7b22974b05b020a8fb8605cf48bb [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2013 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.tests.bundles;
import java.net.URL;
import java.util.Enumeration;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.tests.harness.CoreTest;
import org.eclipse.osgi.service.environment.EnvironmentInfo;
import org.eclipse.osgi.tests.OSGiTestsActivator;
import org.osgi.framework.*;
public class BundleResourceTests extends CoreTest {
private BundleInstaller installer;
protected void setUp() throws Exception {
try {
installer = new BundleInstaller(OSGiTestsActivator.TEST_FILES_ROOT + "resourcetests/bundles", OSGiTestsActivator.getContext()); //$NON-NLS-1$
} catch (InvalidSyntaxException e) {
fail("Failed to create bundle installer", e); //$NON-NLS-1$
}
}
protected void tearDown() throws Exception {
installer.shutdown();
}
public static Test suite() {
return new TestSuite(BundleResourceTests.class);
}
public void testBug320546_01() throws Exception {
Bundle bundle = installer.installBundle("test"); //$NON-NLS-1$
URL result = bundle.getEntry("../../../../security");
assertNull("Found resource!", result);
result = bundle.getEntry("../file.txt");
assertNull("Found resource!", result);
result = bundle.getEntry("../../");
assertNull("Found resource!", result);
result = bundle.getEntry("folder/../../file.txt");
assertNull("Found resource!", result);
result = bundle.getEntry("folder/../plugin.xml");
assertNotNull("Did not find resource!", result);
result = bundle.getEntry("/plugin.xml");
assertNotNull("Did not find resource!", result);
}
public void testBug320546_02() throws Exception {
Bundle bundle = installer.installBundle("test"); //$NON-NLS-1$
Enumeration paths = bundle.getEntryPaths("../");
assertNull("found resource!", paths);
paths = bundle.getEntryPaths("folder");
assertNotNull("Did not find resource!", paths);
paths = bundle.getEntryPaths("folder/../../");
assertNull("found resource!", paths);
paths = bundle.getEntryPaths("folder/..");
assertNotNull("Did not find resource!", paths);
}
public void testBug395274() throws Exception {
ServiceReference<EnvironmentInfo> infoRef = OSGiTestsActivator.getContext().getServiceReference(EnvironmentInfo.class);
EnvironmentInfo info = OSGiTestsActivator.getContext().getService(infoRef);
String original = info.setProperty("osgi.strictBundleEntryPath", "true");
try {
Bundle bundle = installer.installBundle("test"); //$NON-NLS-1$
URL path = bundle.getEntry("META-INF./MANIFEST.MF");
assertNull("found resource!", path);
path = bundle.getEntry("META-INF/MANIFEST.MF");
assertNotNull("Did not find resource!", path);
path = bundle.getEntry("folder/file1.TXT");
assertNull("found resource!", path);
path = bundle.getEntry("folder/file1.txt");
assertNotNull("Did not find resource!", path);
checkEntries(bundle, "/./file1.txt", 1);
checkEntries(bundle, "//file1.txt", 1);
checkEntries(bundle, "/", 1);
checkEntries(bundle, "/.", 1);
} finally {
info.setProperty("osgi.strictBundleEntryPath", original);
OSGiTestsActivator.getContext().ungetService(infoRef);
}
}
public void testBug328795() throws BundleException {
Bundle bundle = installer.installBundle("test"); //$NON-NLS-1$
checkEntries(bundle, "notFound\\", 0); // this results in invalid syntax exception which is logged because of trailing escape
checkEntries(bundle, "notFound\\\\", 0); // test escaped escape "notFound\"
checkEntries(bundle, "notFound(", 0); // test unescaped trailing (
checkEntries(bundle, "notFound\\(", 0); // test escaped trailing (
checkEntries(bundle, "notFound)", 0); // test unescaped trailing )
checkEntries(bundle, "notFound\\)", 0); // test escaped trailing )
checkEntries(bundle, "notFound*", 0); // test trailing unescaped *
checkEntries(bundle, "notFound\\*", 0); // test trailing escaped *
checkEntries(bundle, "paren(.txt", 1); // test unescaped ( -> should find one
checkEntries(bundle, "paren\\(.txt", 1); // test escaped ( -> should find one
checkEntries(bundle, "paren\\\\(.txt", 0); // test escaped escape before unescaped ( -> should find none; looks for paren\(.txt file
checkEntries(bundle, "paren).txt", 1); // test unescaped ) -> should find one
checkEntries(bundle, "paren\\).txt", 1); // test escaped ) -> should find one
checkEntries(bundle, "paren\\\\).txt", 0); // test escaped escape before unescaped ) -> should find none; looks for paren\).txt file
checkEntries(bundle, "paren(", 1); // test unescaped trailing ( -> should find one
checkEntries(bundle, "paren\\(", 1); // test escaped trailing ( -> should find one
checkEntries(bundle, "paren\\\\(", 0); // test escaped escape before ( -> should find none; looks for paren\(
checkEntries(bundle, "paren)", 1); // test unescaped trailing ( -> should find one
checkEntries(bundle, "paren\\)", 1); // test escaped trailing ( -> should find one
checkEntries(bundle, "paren\\\\)", 0); // test escaped escape before ) -> should find none; looks for paren\)
checkEntries(bundle, "paren*", 4); // test trailing wild cards
checkEntries(bundle, "paren*.txt", 2); // test middle wild cards
checkEntries(bundle, "paren\\*", 0); // test escaped wild card -> should find none; looks for paren*
checkEntries(bundle, "paren\\\\*", 0); // test escaped escape before wild card -> should find none; looks for paren\*
checkEntries(bundle, "p*r*n*", 4); // test multiple wild cards
checkEntries(bundle, "p*r*n*.txt", 2); // test multiple wild cards
checkEntries(bundle, "*)*", 2);
checkEntries(bundle, "*(*", 2);
checkEntries(bundle, "*\\)*", 2);
checkEntries(bundle, "*\\(*", 2);
}
public void testBug338081() throws BundleException {
Bundle bundle = installer.installBundle("test"); //$NON-NLS-1$
// Empty string same as '/' for bundle root
Enumeration entries = bundle.findEntries("", "file1.txt", false); //$NON-NLS-1$
assertNotNull("An entry should have been found", entries);
assertTrue("An entry should have been found", entries.hasMoreElements());
assertTrue("Wrong entry found", ((URL) entries.nextElement()).toString().indexOf("file1.txt") > -1);
assertFalse("Only one entry should have been found", entries.hasMoreElements());
}
private void checkEntries(Bundle bundle, String filePattern, int expectedNumber) {
Enumeration entries = bundle.findEntries("folder", filePattern, false);
if (expectedNumber == 0) {
assertNull("Expected nothing here.", entries);
return;
}
int i = 0;
while (entries.hasMoreElements()) {
entries.nextElement();
i++;
}
assertEquals("Unexpected number of entries", expectedNumber, i);
}
}