blob: ca2bd3d1a27422acf3b71274029ace2a71519bc0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2017 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.equinox.p2.tests.director;
import java.net.URI;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.director.DirectorActivator;
import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.internal.provisional.p2.director.IDirector;
import org.eclipse.equinox.p2.core.IAgentLocation;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.engine.*;
import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
public class RollbackTest extends AbstractProvisioningTest {
IInstallableUnit a1;
IInstallableUnit b1;
IInstallableUnit c1;
IInstallableUnit d1;
private IProfile profile;
private IDirector director;
@Override
protected void setUp() throws Exception {
super.setUp();
a1 = createIU("A", DEFAULT_VERSION, true);
b1 = createIU("B", DEFAULT_VERSION, true);
c1 = createIU("C", DEFAULT_VERSION, true);
IRequirement[] req = new IRequirement[1];
req[0] = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "A", VersionRange.emptyRange, null, false, false, true);
d1 = createIU("D", Version.create("1.0.0"), req);
createTestMetdataRepository(new IInstallableUnit[] {a1, b1, c1, d1});
profile = createProfile("TestProfile." + getName());
director = createDirector();
try {
IMetadataRepository rollbackRepo = getRollbackRepository();
if (rollbackRepo != null)
rollbackRepo.removeAll();
} catch (ProvisionException e) {
return;
}
}
private IMetadataRepository getRollbackRepository() throws ProvisionException {
IMetadataRepositoryManager repoMan = (IMetadataRepositoryManager) getAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);
URI location = ((IAgentLocation) getAgent().getService(IAgentLocation.SERVICE_NAME)).getDataArea(DirectorActivator.PI_DIRECTOR);
return repoMan.loadRepository(URIUtil.append(location, "rollback"), null);
}
public void testRollbackProfileProperties() {
IProfileRegistry profileRegistry = getProfileRegistry();
assertEquals(1, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request1 = new ProfileChangeRequest(profile);
request1.setProfileProperty("test1", "test");
request1.setProfileProperty("test2", "test");
IStatus status = director.provision(request1, null, new NullProgressMonitor());
assertEquals("1.0", IStatus.OK, status.getCode());
assertEquals("2.0", "test", profile.getProperty("test1"));
assertEquals("3.0", "test", profile.getProperty("test2"));
assertEquals(2, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request2 = new ProfileChangeRequest(profile);
request2.removeProfileProperty("test1");
request2.setProfileProperty("test2", "bad");
request2.setProfileProperty("test3", "test");
status = director.provision(request2, null, new NullProgressMonitor());
assertEquals("5.0", IStatus.OK, status.getCode());
assertEquals("6.0", null, profile.getProperty("test1"));
assertEquals("7.0", "bad", profile.getProperty("test2"));
assertEquals("8.0", "test", profile.getProperty("test3"));
assertEquals(3, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
IProfile revertProfile = profileRegistry.getProfile(profile.getProfileId(), profileRegistry.listProfileTimestamps(profile.getProfileId())[1]);
status = director.revert(profile, revertProfile, new ProvisioningContext(getAgent()), new NullProgressMonitor());
assertEquals("10.0", IStatus.OK, status.getCode());
assertEquals("11.0", "test", profile.getProperty("test1"));
assertEquals("12.0", "test", profile.getProperty("test2"));
assertEquals("13.0", null, profile.getProperty("test3"));
}
public void testRollbackIUs() {
IProfileRegistry profileRegistry = getProfileRegistry();
assertEquals(1, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request1 = new ProfileChangeRequest(profile);
request1.addInstallableUnits(new IInstallableUnit[] {a1});
request1.addInstallableUnits(new IInstallableUnit[] {b1});
IStatus status = director.provision(request1, null, new NullProgressMonitor());
assertEquals("1.0", IStatus.OK, status.getCode());
IQueryResult profileIUs = profile.query(QueryUtil.createIUAnyQuery(), null);
assertContains("2.0", profileIUs, a1);
assertContains("3.0", profileIUs, b1);
assertEquals(2, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request2 = new ProfileChangeRequest(profile);
request2.removeInstallableUnits(new IInstallableUnit[] {a1});
request2.addInstallableUnits(new IInstallableUnit[] {c1});
status = director.provision(request2, null, new NullProgressMonitor());
assertEquals("5.0", IStatus.OK, status.getCode());
profileIUs = profile.query(QueryUtil.createIUAnyQuery(), null);
assertNotContains("6.0", profileIUs, a1);
assertContains("7.0", profileIUs, b1);
assertContains("8.0", profileIUs, c1);
assertEquals(3, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
IProfile revertProfile = profileRegistry.getProfile(profile.getProfileId(), profileRegistry.listProfileTimestamps(profile.getProfileId())[1]);
status = director.revert(profile, revertProfile, new ProvisioningContext(getAgent()), new NullProgressMonitor());
assertEquals("10.0", IStatus.OK, status.getCode());
profileIUs = profile.query(QueryUtil.createIUAnyQuery(), null);
assertContains("11.0", profileIUs, a1);
assertContains("12.0", profileIUs, b1);
assertNotContains("13.0", profileIUs, c1);
}
public void testRollbackIUProfileProperties() {
IProfileRegistry profileRegistry = getProfileRegistry();
assertEquals(1, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request1 = new ProfileChangeRequest(profile);
request1.addInstallableUnits(new IInstallableUnit[] {a1});
request1.setInstallableUnitProfileProperty(a1, "test1", "test");
request1.setInstallableUnitProfileProperty(a1, "test2", "test");
IStatus status = director.provision(request1, null, new NullProgressMonitor());
assertEquals("1.0", IStatus.OK, status.getCode());
assertEquals("2.0", "test", profile.getInstallableUnitProperty(a1, "test1"));
assertEquals("3.0", "test", profile.getInstallableUnitProperty(a1, "test2"));
assertEquals(2, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request2 = new ProfileChangeRequest(profile);
request2.removeInstallableUnitProfileProperty(a1, "test1");
request2.setInstallableUnitProfileProperty(a1, "test2", "bad");
request2.setInstallableUnitProfileProperty(a1, "test3", "test");
status = director.provision(request2, null, new NullProgressMonitor());
assertEquals("5.0", IStatus.OK, status.getCode());
assertEquals("6.0", null, profile.getInstallableUnitProperty(a1, "test1"));
assertEquals("7.0", "bad", profile.getInstallableUnitProperty(a1, "test2"));
assertEquals("8.0", "test", profile.getInstallableUnitProperty(a1, "test3"));
assertEquals(3, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
IProfile revertProfile = profileRegistry.getProfile(profile.getProfileId(), profileRegistry.listProfileTimestamps(profile.getProfileId())[1]);
status = director.revert(profile, revertProfile, new ProvisioningContext(getAgent()), new NullProgressMonitor());
assertEquals("10.0", IStatus.OK, status.getCode());
assertEquals("11.0", "test", profile.getInstallableUnitProperty(a1, "test1"));
assertEquals("12.0", "test", profile.getInstallableUnitProperty(a1, "test2"));
assertEquals("13.0", null, profile.getInstallableUnitProperty(a1, "test3"));
}
public void testRollbackDependentIUProfileProperties() {
IProfileRegistry profileRegistry = getProfileRegistry();
assertEquals(1, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request1 = new ProfileChangeRequest(profile);
request1.addInstallableUnits(new IInstallableUnit[] {d1});
request1.setInstallableUnitProfileProperty(d1, "test1", "test");
request1.setInstallableUnitProfileProperty(a1, "test2", "test");
IStatus status = director.provision(request1, null, new NullProgressMonitor());
assertEquals("1.0", IStatus.OK, status.getCode());
assertEquals("2.0", "test", profile.getInstallableUnitProperty(d1, "test1"));
assertEquals("3.0", "test", profile.getInstallableUnitProperty(a1, "test2"));
assertEquals(2, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
ProfileChangeRequest request2 = new ProfileChangeRequest(profile);
request2.removeInstallableUnits(new IInstallableUnit[] {d1});
request2.addInstallableUnits(new IInstallableUnit[] {b1});
request2.setInstallableUnitProfileProperty(b1, "test3", "test");
status = director.provision(request2, null, new NullProgressMonitor());
assertEquals("5.0", IStatus.OK, status.getCode());
assertEquals("6.0", null, profile.getInstallableUnitProperty(d1, "test1"));
assertEquals("7.0", null, profile.getInstallableUnitProperty(a1, "test2"));
assertEquals("8.0", "test", profile.getInstallableUnitProperty(b1, "test3"));
assertEquals(3, profileRegistry.listProfileTimestamps(profile.getProfileId()).length);
IProfile revertProfile = profileRegistry.getProfile(profile.getProfileId(), profileRegistry.listProfileTimestamps(profile.getProfileId())[1]);
status = director.revert(profile, revertProfile, new ProvisioningContext(getAgent()), new NullProgressMonitor());
assertEquals("10.0", IStatus.OK, status.getCode());
assertEquals("11.0", "test", profile.getInstallableUnitProperty(d1, "test1"));
assertEquals("12.0", "test", profile.getInstallableUnitProperty(a1, "test2"));
assertEquals("13.0", null, profile.getInstallableUnitProperty(b1, "test3"));
}
}