| /******************************************************************************* |
| * Copyright (c) 2012, 2017 Ericsson 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: |
| * Pascal Rapicault (Ericsson) - Initial API and implementation |
| * Red Hat Inc. - Bug 460967 |
| *******************************************************************************/ |
| package org.eclipse.equinox.p2.tests.sharedinstall; |
| |
| import java.io.File; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.core.runtime.URIUtil; |
| import org.eclipse.core.runtime.preferences.IPreferencesService; |
| import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; |
| import org.eclipse.equinox.p2.repository.IRepositoryManager; |
| import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager; |
| import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; |
| import org.eclipse.equinox.p2.tests.TestActivator; |
| import org.eclipse.equinox.security.storage.EncodingUtils; |
| import org.osgi.framework.Bundle; |
| import org.osgi.service.prefs.BackingStoreException; |
| import org.osgi.service.prefs.Preferences; |
| |
| public class SharedProfilePreferencesTest extends AbstractProvisioningTest { |
| @Override |
| protected void setUp() throws Exception { |
| //We don't call super.setUp() on purpose |
| |
| Bundle p2Core = Platform.getBundle("org.eclipse.equinox.p2.core"); |
| p2Core.stop(); |
| |
| //We have to do all this dance to copy the files because if we store them at the actual path, then the path is too long |
| File baseInstallToCopy = getTestData("baseInstall", "testData/sharedPrefs/test1/baseInstall"); |
| File baseInstall = getTempFolder(); |
| File baseInstallToCopyTo = new File(baseInstall, "p2/org.eclipse.equinox.p2.engine/profileRegistry"); |
| baseInstallToCopy.mkdirs(); |
| copy("copy base install", baseInstallToCopy, baseInstallToCopyTo); |
| |
| File userHomeToCopy = getTestData("useHome", "testData/sharedPrefs/test1/userHome"); |
| File userHome = getTempFolder(); |
| File userHomeToCopyTo = new File(userHome, "p2/org.eclipse.equinox.p2.engine/"); |
| userHomeToCopyTo.mkdirs(); |
| copy("copy user home data", userHomeToCopy, userHomeToCopyTo); |
| |
| System.setProperty("osgi.sharedConfiguration.area", new File(baseInstall, "configuration").toURI().toString()); |
| System.setProperty("osgi.configuration.area", new File(userHome, "configuration").toURI().toString() + '/'); |
| System.setProperty("eclipse.p2.profile", "epp.package.java"); |
| System.setProperty("eclipse.p2.data.area", "@config.dir/../p2"); |
| IPreferencesService prefService = ServiceHelper.getService(TestActivator.getContext(), IPreferencesService.class); |
| prefService.getRootNode().node("/profile/").removeNode(); |
| p2Core.start(); |
| } |
| |
| public void testCountReposInSharedInstallPreferences() { |
| IPreferencesService prefService = ServiceHelper.getService(TestActivator.getContext(), IPreferencesService.class); |
| assertNotNull(prefService); |
| try { |
| URI defaultLocation = adjustTrailingSlash(URIUtil.makeAbsolute(URIUtil.fromString(TestActivator.getContext().getProperty("osgi.configuration.area") + "/../p2/"), new URI(".")), true); |
| String locationString = EncodingUtils.encodeSlashes(defaultLocation.toString()); |
| Preferences node = prefService.getRootNode().node("/profile/shared/" + locationString + "/_SELF_/org.eclipse.equinox.p2.metadata.repository/repositories"); //$NON-NLS-1$ |
| String[] children = node.childrenNames(); |
| assertEquals(3, children.length); |
| } catch (IllegalArgumentException e) { |
| fail("Exception", e); |
| } catch (URISyntaxException e) { |
| fail("Exception", e); |
| } catch (BackingStoreException e) { |
| fail("Exception", e); |
| } |
| |
| } |
| |
| private static URI adjustTrailingSlash(URI url, boolean trailingSlash) throws URISyntaxException { |
| String file = url.toString(); |
| if (trailingSlash == (file.endsWith("/"))) //$NON-NLS-1$ |
| return url; |
| file = trailingSlash ? file + "/" : file.substring(0, file.length() - 1); //$NON-NLS-1$ |
| return new URI(file); |
| } |
| |
| public void testCountRepoInSharedInstallThroughRepoManagerAPI() { |
| IMetadataRepositoryManager repoMgr = getAgent().getService(IMetadataRepositoryManager.class); |
| URI[] repos = repoMgr.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL); |
| assertEquals(3, repos.length); |
| } |
| |
| } |