1 /*******************************************************************************
2  * Copyright (c) 2008, 2017 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 
15 package org.eclipse.equinox.frameworkadmin.tests;
16 
17 import static org.junit.Assert.*;
18 
19 import java.io.*;
20 import java.util.Properties;
21 import org.eclipse.core.runtime.FileLocator;
22 import org.eclipse.core.runtime.URIUtil;
23 import org.eclipse.equinox.frameworkadmin.BundleInfo;
24 import org.eclipse.equinox.internal.provisional.frameworkadmin.*;
25 import org.junit.Test;
26 
27 public class ManipulatorTests extends AbstractFwkAdminTest {
28 
29 	@Test
testBug212361_osgiInBundlesList()30 	public void testBug212361_osgiInBundlesList() throws Exception {
31 		File installFolder = Activator.getContext().getDataFile("212361");
32 		File configurationFolder = new File(installFolder, "configuration");
33 		Manipulator manipulator = getFrameworkManipulator(configurationFolder, new File(installFolder, "foo"));
34 
35 		BundleInfo osgiBi = new BundleInfo("org.eclipse.osgi", "3.3.1",
36 				URIUtil.toURI(FileLocator
37 						.resolve(Activator.getContext().getBundle().getEntry("dataFile/org.eclipse.osgi.jar"))),
38 				0, true);
39 		BundleInfo configuratorBi = new BundleInfo(
40 				"org.eclipse.equinox.simpleconfigurator", "1.0.0", URIUtil.toURI(FileLocator.resolve(Activator
41 						.getContext().getBundle().getEntry("dataFile/org.eclipse.equinox.simpleconfigurator.jar"))),
42 				1, true);
43 
44 		manipulator.getConfigData().addBundle(osgiBi);
45 		manipulator.getConfigData().addBundle(configuratorBi);
46 
47 		manipulator.save(false);
48 
49 		Properties configIni = new Properties();
50 		try (InputStream in = new BufferedInputStream(
51 				new FileInputStream(new File(configurationFolder, "config.ini")))) {
52 			configIni.load(in);
53 		}
54 
55 		String bundles = (String) configIni.get("osgi.bundles");
56 		assertEquals(-1 , bundles.indexOf("org.eclipse.osgi"));
57 	}
58 
59 	@Test
testBug277553_installAreaFromFwJar()60 	public void testBug277553_installAreaFromFwJar() throws Exception {
61 		File folder = getTestFolder("installAreaFromFwJar");
62 		File fwJar = new File(folder, "plugins/org.eclipse.osgi.jar");
63 		fwJar.getParentFile().mkdirs();
64 
65 		copyStream(Activator.getContext().getBundle().getEntry("dataFile/org.eclipse.osgi.jar").openStream(), true,
66 				new FileOutputStream(fwJar), true);
67 		BundleInfo osgiBi = new BundleInfo("org.eclipse.osgi", "3.3.1", fwJar.toURI(), 0, true);
68 
69 		File ini = new File(folder, "eclipse.ini");
70 		writeEclipseIni(ini, new String[] { "-foo", "bar", "-vmargs", "-Xmx256m" });
71 
72 		startSimpleConfiguratorManipulator();
73 		FrameworkAdmin fwkAdmin = getEquinoxFrameworkAdmin();
74 
75 		Manipulator manipulator = fwkAdmin.getManipulator();
76 		manipulator.getConfigData().addBundle(osgiBi);
77 		LauncherData launcherData = manipulator.getLauncherData();
78 		launcherData.setFwJar(fwJar);
79 		launcherData.setLauncher(new File(folder, "eclipse"));
80 
81 		manipulator.load();
82 
83 		assertEquals(manipulator.getLauncherData().getFwPersistentDataLocation(), new File(folder, "configuration"));
84 	}
85 
86 	@Test
testBug258126_ProgramArgs_VMArgs()87 	public void testBug258126_ProgramArgs_VMArgs() throws Exception {
88 		File installFolder = getTestFolder("258126");
89 		File ini = new File(installFolder, "eclipse.ini");
90 		writeEclipseIni(ini, new String[] { "-foo", "bar", "-vmargs", "-Xmx256m" });
91 
92 		FrameworkAdmin fwkAdmin = getEquinoxFrameworkAdmin();
93 		Manipulator manipulator = fwkAdmin.getManipulator();
94 		LauncherData launcherData = manipulator.getLauncherData();
95 		launcherData.setLauncher(new File(installFolder, "eclipse"));
96 		try {
97 			manipulator.load();
98 		} catch (IllegalStateException e) {
99 			// TODO We ignore the framework JAR location not set exception
100 		}
101 
102 		assertArrayEquals(launcherData.getJvmArgs(), new String[] { "-Xmx256m" });
103 		assertArrayEquals(launcherData.getProgramArgs(), new String[] { "-foo", "bar" });
104 
105 		launcherData.addJvmArg("-Xms64m");
106 		launcherData.addProgramArg("-console");
107 
108 		// eclipse.ini won't save unless we actually have something in the configuration
109 		BundleInfo osgiBi = new BundleInfo("org.eclipse.osgi", "3.3.1",
110 				URIUtil.toURI(FileLocator
111 						.resolve(Activator.getContext().getBundle().getEntry("dataFile/org.eclipse.osgi.jar"))),
112 				0, true);
113 		manipulator.getConfigData().addBundle(osgiBi);
114 		manipulator.save(false);
115 
116 		assertContent(ini, "-foo", "bar", "-console", "-vmargs", "-Xmx256m", "-Xms64m");
117 	}
118 
119 }
120