@Test
 public void testProfilePublishing() throws Exception {
   File customProfile = resourceFile("publishers/virgo-1.6.profile");
   Collection<DependencySeed> seeds = subject.publishEEProfile(customProfile);
   assertThat(seeds.size(), is(2));
   IInstallableUnit virgoProfileIU = unitsById(seeds).get("a.jre.virgo");
   assertThat(virgoProfileIU, not(nullValue()));
   Collection<IProvidedCapability> provided = virgoProfileIU.getProvidedCapabilities();
   boolean customJavaxActivationVersionFound = false;
   Version version_1_1_1 = Version.create("1.1.1");
   for (IProvidedCapability capability : provided) {
     if (PublisherHelper.CAPABILITY_NS_JAVA_PACKAGE.equals(capability.getNamespace())) {
       if ("javax.activation".equals(capability.getName())) {
         if (version_1_1_1.equals(capability.getVersion())) {
           customJavaxActivationVersionFound = true;
           break;
         }
       }
     }
   }
   assertTrue(
       "did not find capability for package javax.activation with custom version " + version_1_1_1,
       customJavaxActivationVersionFound);
   assertThat(unitsById(seeds).keySet(), hasItem("config.a.jre.virgo"));
 }
Exemple #2
0
  public void testConcatentatedStrings() {
    Version v = Version.parseVersion("format(r):'a''b'");
    assertNotNull(v);
    assertEquals(Version.parseVersion("raw:'ab'"), v);

    assertNotNull(v = Version.parseVersion("format(r):'a has a \"hat\" it is '\"a's\""));
    assertEquals(Version.parseVersion("raw:'a has a \"hat\" it is '\"a's\""), v);
  }
Exemple #3
0
  public void testString() {
    Version v = Version.parseVersion("format(r):'a'");
    assertNotNull(v);
    assertEquals(Version.parseVersion("raw:'a'"), v);

    assertNotNull(v = Version.parseVersion("format(r):\"a\""));
    assertEquals(Version.parseVersion("raw:'a'"), v);
  }
  private void verifyBundleCU() {

    final String bundleCUId = flavor + configSpec + ORG_ECLIPSE_CORE_COMMANDS;
    IQueryResult queryResult =
        publisherResult.query(QueryUtil.createIUQuery(bundleCUId), new NullProgressMonitor());
    assertEquals(1, queryResultSize(queryResult));
    IInstallableUnitFragment fragment = (IInstallableUnitFragment) queryResult.iterator().next();

    assertNull(fragment.getFilter()); // no filter if config spec is ANY

    assertTrue(fragment.getVersion().equals(version));

    assertFalse(fragment.isSingleton());

    final Collection<IProvidedCapability> providedCapabilities = fragment.getProvidedCapabilities();
    verifyProvidedCapability(
        providedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, bundleCUId, version);
    verifyProvidedCapability(
        providedCapabilities,
        "org.eclipse.equinox.p2.flavor",
        flavor + configSpec,
        version); //$NON-NLS-1$
    assertEquals(2, providedCapabilities.size());

    assertEquals(0, fragment.getRequirements().size());

    final Collection<IRequirement> hostRequirements = fragment.getHost();
    verifyRequiredCapability(
        hostRequirements,
        "osgi.bundle",
        ORG_ECLIPSE_CORE_COMMANDS,
        new VersionRange(BUNDLE_VERSION)); // $NON-NLS-1$
    verifyRequiredCapability(
        hostRequirements,
        "org.eclipse.equinox.p2.eclipse.type",
        "bundle",
        new VersionRange(Version.create("1.0.0"), true, Version.create("2.0.0"), false),
        1,
        1,
        false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    assertTrue(hostRequirements.size() == 2);

    final Collection<ITouchpointData> touchpointData = fragment.getTouchpointData();
    assertEquals(1, touchpointData.size());
    ITouchpointData data = touchpointData.iterator().next();
    ITouchpointInstruction instruction = data.getInstruction("install"); // $NON-NLS-1$
    assertEquals("installBundle(bundle:${artifact})", instruction.getBody()); // $NON-NLS-1$
    instruction = data.getInstruction("uninstall"); // $NON-NLS-1$
    assertEquals("uninstallBundle(bundle:${artifact})", instruction.getBody()); // $NON-NLS-1$
    instruction = data.getInstruction("configure"); // $NON-NLS-1$
    assertEquals("setStartLevel(startLevel:2);", instruction.getBody()); // $NON-NLS-1$
    instruction = data.getInstruction("unconfigure"); // $NON-NLS-1$
    assertEquals("setStartLevel(startLevel:-1);", instruction.getBody()); // $NON-NLS-1$
  }
  protected void setUp() throws Exception {
    super.setUp();
    b1 = createIU("B", Version.create("1.0.0"), false);
    b2 = createIU("B", Version.create("2.0.0"), false);
    b3 = createIU("B", Version.create("3.0.0"), false);
    b4 = createIU("B", Version.create("4.0.0"), false);

    // B's dependency is missing
    IRequirement[] reqA = new IRequirement[4];
    reqA[0] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "B",
            new VersionRange("[1.0.0,1.0.0]"),
            null,
            true,
            false,
            true);
    reqA[1] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "B",
            new VersionRange("[2.0.0,2.0.0]"),
            null,
            true,
            false,
            true);
    reqA[2] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "B",
            new VersionRange("[3.0.0,3.0.0]"),
            null,
            true,
            false,
            true);
    reqA[3] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "B",
            new VersionRange("[4.0.0,4.0.0]"),
            null,
            true,
            false,
            true);
    a1 = createIU("A", Version.create("1.0.0"), reqA);

    createTestMetdataRepository(new IInstallableUnit[] {a1, b1, b2, b3, b4});

    profile = createProfile("TestProfile." + getName());
    planner = createPlanner();
  }
Exemple #6
0
 public void testNonRElements() {
   try {
     Version.parseVersion("format(r):aaa");
     fail("a is not a valid raw element");
   } catch (IllegalArgumentException e) {
     assertTrue(true);
   }
   try {
     Version.parseVersion("format(r):1,2");
     fail("comma is not a delimiter in raw format");
   } catch (IllegalArgumentException e) {
     assertTrue(true);
   }
 }
  public void testTransferError() throws Exception {
    File simpleRepo = getTestData("simple repository", "testData/artifactRepo/transferTestRepo");
    IArtifactRepository source = null;
    IArtifactRepository target = null;
    try {
      source =
          getArtifactRepositoryManager()
              .loadRepository(simpleRepo.toURI(), new NullProgressMonitor());
      target = createArtifactRepository(new File(getTempFolder(), getName()).toURI(), null);
    } catch (ProvisionException e) {
      fail("failing setting up the tests", e);
    }

    IArtifactDescriptor sourceDescriptor =
        getArtifactKeyFor(
            source, "osgi.bundle", "missingFromFileSystem", Version.createOSGi(1, 0, 0))[0];
    SimpleArtifactDescriptor targetDescriptor = new SimpleArtifactDescriptor(sourceDescriptor);
    targetDescriptor.setRepositoryProperty("artifact.folder", "true");
    class TestRequest extends MirrorRequest {
      public TestRequest(
          IArtifactKey key,
          IArtifactRepository targetRepository,
          Map<String, String> targetDescriptorProperties,
          Map<String, String> targetRepositoryProperties) {
        super(
            key,
            targetRepository,
            targetDescriptorProperties,
            targetRepositoryProperties,
            getTransport());
      }

      public void setSource(IArtifactRepository source) {
        super.setSourceRepository(source);
      }
    }
    TestRequest request =
        new TestRequest(
            new ArtifactKey("osgi.bundle", "missingFromFileSystem", Version.createOSGi(1, 0, 0)),
            target,
            null,
            null);
    request.setSource(source);
    IStatus s =
        transferSingle(request, targetDescriptor, sourceDescriptor, new NullProgressMonitor());
    assertTrue(s.toString(), s.getException().getClass() == FileNotFoundException.class);
  }
 private IInstallableUnit createIdIU(String id) {
   InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
   String time = Long.toString(System.currentTimeMillis());
   iu.setId("toast.id");
   iu.setVersion(Version.createOSGi(0, 0, 0, time));
   Map touchpointData = new HashMap();
   String data = "addJvmArg(jvmArg:-D" + ICoreConstants.ID_PROPERTY + "=" + id + ");";
   touchpointData.put("configure", data);
   data = "removeJvmArg(jvmArg:-D" + ICoreConstants.ID_PROPERTY + "=" + id + ");";
   touchpointData.put("unconfigure", data);
   iu.addTouchpointData(MetadataFactory.createTouchpointData(touchpointData));
   ITouchpointType touchpoint =
       MetadataFactory.createTouchpointType(
           "org.eclipse.equinox.p2.osgi", Version.createOSGi(1, 0, 0));
   iu.setTouchpointType(touchpoint);
   return MetadataFactory.createInstallableUnit(iu);
 }
 private IQuery<IInstallableUnit> createQuery(IUDescription iu) {
   String id = iu.getId();
   String version = iu.getVersion();
   if (version == null || version.length() == 0) {
     return QueryUtil.createLatestQuery(QueryUtil.createIUQuery(id));
   } else {
     return QueryUtil.createIUQuery(id, Version.parseVersion(version));
   }
 }
 private static Version parseVersion(String version) {
   if (version == null) {
     return null;
   }
   try {
     return Version.parseVersion(version);
   } catch (IllegalArgumentException e) {
     throw new TargetPlatformFilterSyntaxException("Failed to parse version: " + version, e);
   }
 }
  @Override
  public void setupPublisherResult() {
    super.setupPublisherResult();

    InstallableUnitDescription iuDescription = new InstallableUnitDescription();
    iuDescription.setId(ORG_ECLIPSE_CORE_COMMANDS);
    iuDescription.setVersion(Version.create(BUNDLE_VERSION));
    IInstallableUnit iu = MetadataFactory.createInstallableUnit(iuDescription);

    publisherResult.addIU(iu, IPublisherResult.NON_ROOT);
  }
 private Version parseVersion(Unit unitReference) {
   try {
     return Version.parseVersion(unitReference.getVersion());
   } catch (IllegalArgumentException e) {
     throw new TargetDefinitionSyntaxException(
         NLS.bind(
             "Cannot parse version \"{0}\" of unit \"{1}\"",
             unitReference.getVersion(), unitReference.getId()),
         e);
   }
 }
Exemple #13
0
 protected void setUp() throws Exception {
   super.setUp();
   a1 =
       createIU(
           "A",
           Version.create("1.0.0"),
           createRequiredCapabilities(
               IInstallableUnit.NAMESPACE_IU_ID, "A", new VersionRange("[1.0.0, 1.0.0]")));
   createTestMetdataRepository(new IInstallableUnit[] {a1});
   profile = createProfile(NoRequirements.class.getName());
   planner = createPlanner();
 }
 /*
  * Return a boolean value indicating whether or not the IU with the given ID and version
  * is installed. We do this by loading the profile registry and seeing if it is there.
  */
 public boolean isInstalled(String id, String version) {
   File location =
       new File(output, getRootFolder() + "/p2/org.eclipse.equinox.p2.engine/profileRegistry");
   SimpleProfileRegistry registry =
       new SimpleProfileRegistry(
           getAgent(), location, new SurrogateProfileHandler(getAgent()), false);
   IProfile[] profiles = registry.getProfiles();
   assertEquals("1.0 Should only be one profile in registry.", 1, profiles.length);
   IQueryResult queryResult =
       profiles[0].query(QueryUtil.createIUQuery(id, Version.create(version)), null);
   return !queryResult.isEmpty();
 }
Exemple #15
0
  public void testGetAction() {
    final ArrayList actionsList1 = new ArrayList();
    InstallableUnitPhase phase1 =
        new InstallableUnitPhase("test", 1) {
          protected List<ProvisioningAction> getActions(InstallableUnitOperand operand) {
            List<ProvisioningAction> actions = getActions(operand.second(), "test1");
            actionsList1.addAll(actions);
            return actions;
          }
        };
    final ArrayList actionsList2 = new ArrayList();
    InstallableUnitPhase phase2 =
        new InstallableUnitPhase("test", 1) {
          protected List<ProvisioningAction> getActions(InstallableUnitOperand operand) {
            List<ProvisioningAction> actions = getActions(operand.second(), "test2");
            actionsList2.addAll(actions);
            return actions;
          }
        };

    PhaseSet phaseSet = new TestPhaseSet(new Phase[] {phase1, phase2});
    IProfile profile = createProfile("PhaseTest");

    Map instructions = new HashMap();
    instructions.put("test1", MetadataFactory.createTouchpointInstruction("test1.test()", null));
    instructions.put("test2", MetadataFactory.createTouchpointInstruction("test2.test()", null));
    ITouchpointData touchpointData = MetadataFactory.createTouchpointData(instructions);
    IInstallableUnit unit =
        createIU(
            "test",
            Version.create("1.0.0"),
            null,
            NO_REQUIRES,
            new IProvidedCapability[0],
            NO_PROPERTIES,
            ITouchpointType.NONE,
            touchpointData,
            false);
    IProvisioningPlan plan = engine.createPlan(profile, null);
    plan.addInstallableUnit(unit);
    IStatus status = engine.perform(plan, phaseSet, new NullProgressMonitor());
    if (!status.isOK()) {
      fail(status.toString());
    }

    assertEquals(
        TestAction.class,
        ((ParameterizedProvisioningAction) actionsList1.get(0)).getAction().getClass());
    assertEquals(
        TestAction.class,
        ((ParameterizedProvisioningAction) actionsList2.get(0)).getAction().getClass());
  }
  private void copyGenerators() {
    List<Generator> generators = cspec.getGenerators();
    if (generators.isEmpty()) return;

    IGeneratorsType gt = ICSpecXMLFactory.eINSTANCE.createGeneratorsType();
    xmlSpec.getGenerators().add(gt);
    for (Generator generator : generators) {
      IGenerator xmlGen = ICSpecXMLFactory.eINSTANCE.createGenerator();
      ComponentIdentifier cid = generator.getGenerates();
      xmlGen.setGenerates(cid.getId());
      xmlGen.setGeneratesType(cid.getType());
      Version version = cid.getVersion();
      if (version != null) xmlGen.setGeneratesVersionString(version.toString());
      xmlGen.setAttribute(generator.getAttribute());
      ComponentRequest component = generator.getComponent();
      if (component != null) {
        xmlGen.setComponent(component.getId());
        xmlGen.setComponentType(component.getType());
      }
      gt.getGenerator().add(xmlGen);
    }
  }
  @Override
  protected void setUp() throws Exception {
    super.setUp();

    a1 = createIU("A", Version.create("2.0.0"));
    IUpdateDescriptor update =
        MetadataFactory.createUpdateDescriptor(
            "A", new VersionRange("[2.0.0, 2.0.0]"), 0, "update description");
    updateOfA =
        createIU(
            "UpdateA",
            Version.createOSGi(1, 0, 0),
            null,
            NO_REQUIRES,
            NO_PROVIDES,
            NO_PROPERTIES,
            null,
            NO_TP_DATA,
            false,
            update,
            NO_REQUIRES);
    a11 = createIUUpdate();
  }
 private static IQuery<IInstallableUnit> createQuery(IUDescription iu) {
   String id = iu.getId();
   String version = iu.getVersion();
   if (iu.getQueryMatchExpression() != null) {
     return QueryUtil.createMatchQuery(
         iu.getQueryMatchExpression(), (Object[]) iu.getQueryParameters());
   } else {
     if (version == null || version.length() == 0) {
       return QueryUtil.createLatestQuery(QueryUtil.createIUQuery(id));
     } else {
       return QueryUtil.createIUQuery(id, Version.parseVersion(version));
     }
   }
 }
  protected IPublisherAction[] createActions() {
    ArrayList<IPublisherAction> result = new ArrayList<IPublisherAction>();
    if (features == null) features = new File[] {new File(source, "features")}; // $NON-NLS-1$
    result.add(new FeaturesAction(features));
    if (bundles == null) bundles = new File[] {new File(source, "plugins")}; // $NON-NLS-1$
    result.add(new BundlesAction(bundles));

    if (rootIU != null) {
      result.add(new RootIUAction(rootIU, Version.parseVersion(rootVersion), rootIU));
      info.addAdvice(new RootIUResultFilterAdvice(null));
    }

    return result.toArray(new IPublisherAction[result.size()]);
  }
Exemple #20
0
 /**
  *
  * <!-- begin-user-doc -->
  * <!-- end-user-doc -->
  *
  * @generated
  */
 @Override
 public boolean eIsSet(int featureID) {
   switch (featureID) {
     case P2Package.ARTIFACT_KEY__CLASSIFIER:
       return CLASSIFIER_EDEFAULT == null
           ? classifier != null
           : !CLASSIFIER_EDEFAULT.equals(classifier);
     case P2Package.ARTIFACT_KEY__ID:
       return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
     case P2Package.ARTIFACT_KEY__VERSION:
       return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
   }
   return super.eIsSet(featureID);
 }
 private IInstallableUnit createIUUpdate() {
   return createIU(
       "A",
       Version.create("2.1.0"),
       null,
       NO_REQUIRES,
       NO_PROVIDES,
       NO_PROPERTIES,
       ITouchpointType.NONE,
       NO_TP_DATA,
       false,
       MetadataFactory.createUpdateDescriptor(
           "A", new VersionRange("[2.0.0, 2.1.0]"), 0, "update description"),
       null);
 }
  protected void setUp() throws Exception {
    super.setUp();
    a1 = createIU("A", Version.create("1.0.0"), true);

    createIU(
        "A",
        Version.create("2.0.0"),
        null,
        NO_REQUIRES,
        NO_PROVIDES,
        NO_PROPERTIES,
        ITouchpointType.NONE,
        NO_TP_DATA,
        true,
        MetadataFactory.createUpdateDescriptor("A", VersionRange.emptyRange, 0, "foo bar"),
        null);
    a2 = createIU("A", Version.create("2.0.0"), true);

    createTestMetdataRepository(new IInstallableUnit[] {a1, a2});

    profile = createProfile("TestProfile." + getName());
    planner = createPlanner();
    engine = createEngine();
  }
 /**
  * Returns an IU corresponding to the given artifact key and bundle, or <code>null</code> if an IU
  * could not be created.
  */
 public static IInstallableUnit createBundleIU(IArtifactKey artifactKey, File bundleFile) {
   BundleDescription bundleDescription = BundlesAction.createBundleDescription(bundleFile);
   if (bundleDescription == null) return null;
   PublisherInfo info = new PublisherInfo();
   Version version = Version.create(bundleDescription.getVersion().toString());
   AdviceFileAdvice advice =
       new AdviceFileAdvice(
           bundleDescription.getSymbolicName(),
           version,
           new Path(bundleFile.getAbsolutePath()),
           AdviceFileAdvice.BUNDLE_ADVICE_FILE);
   if (advice.containsAdvice()) info.addAdvice(advice);
   String shape = bundleFile.isDirectory() ? IBundleShapeAdvice.DIR : IBundleShapeAdvice.JAR;
   info.addAdvice(new BundleShapeAdvice(bundleDescription.getSymbolicName(), version, shape));
   return BundlesAction.createBundleIU(bundleDescription, artifactKey, info);
 }
 public IInstallableUnit getRemoteIU(String id, String version) {
   File location =
       new File(output, getRootFolder() + "/p2/org.eclipse.equinox.p2.engine/profileRegistry");
   SimpleProfileRegistry registry =
       new SimpleProfileRegistry(
           getAgent(), location, new SurrogateProfileHandler(getAgent()), false);
   IProfile[] profiles = registry.getProfiles();
   assertEquals("1.0 Should only be one profile in registry.", 1, profiles.length);
   IQueryResult queryResult =
       profiles[0].query(QueryUtil.createIUQuery(id, Version.create(version)), null);
   assertEquals(
       "1.1 Should not have more than one IU wth the same ID and version.",
       1,
       queryResultSize(queryResult));
   return (IInstallableUnit) queryResult.iterator().next();
 }
  /**
   * We will initialize file contents with a sample text.
   *
   * @throws SAXException
   */
  @Override
  protected InputStream openContentStream(String containerName, String fileName) {
    String name = containerName;
    int lastSlash = name.lastIndexOf('/');
    if (lastSlash >= 0) name = name.substring(lastSlash + 1);

    CSpecBuilder builder = new CSpecBuilder();
    builder.setName(name);
    builder.setComponentTypeID(INIT_COMPONENT_TYPE);
    builder.setVersion(Version.parseVersion(INIT_VERSION_STRING));

    CSpec cspec = new CSpec(builder);

    AccessibleByteArrayOutputStream bld = new AccessibleByteArrayOutputStream();
    try {
      Utils.serialize(cspec, bld);
    } catch (SAXException e) {
      throw new RuntimeException(
          Messages.cannot_create_a_new_buckminster_component_specification_file, e);
    }

    return bld.getInputStream();
  }
  @Override
  protected void setUp() throws Exception {
    super.setUp();
    InstallableUnitDescription iud = new MetadataFactory.InstallableUnitDescription();
    iud.setId("A");
    iud.setVersion(Version.create("1.0.0"));

    String orExpression =
        "providedCapabilities.exists(pc | pc.namespace == 'org.eclipse.equinox.p2.iu' && (pc.name == 'B' || pc.name == 'C'))";
    IExpression expr = ExpressionUtil.parse(orExpression);
    IMatchExpression matchExpression = ExpressionUtil.getFactory().matchExpression(expr);

    Collection<IMatchExpression<IInstallableUnit>> updateExpression =
        new ArrayList<IMatchExpression<IInstallableUnit>>();
    updateExpression.add(matchExpression);
    iud.setUpdateDescriptor(
        MetadataFactory.createUpdateDescriptor(
            updateExpression, IUpdateDescriptor.HIGH, (String) null, (URI) null));
    iua = MetadataFactory.createInstallableUnit(iud);

    Collection<IInstallableUnit> ius = new ArrayList<IInstallableUnit>();
    ius.add(iua);
    URI repoURI = getTempFolder().toURI();
    createMetadataRepository(repoURI, null).addInstallableUnits(ius);
    getMetadataRepositoryManager().removeRepository(repoURI);

    x =
        getMetadataRepositoryManager()
            .loadRepository(repoURI, null)
            .query(QueryUtil.ALL_UNITS, null)
            .iterator()
            .next()
            .getUpdateDescriptor()
            .getIUsBeingUpdated();
    assertEquals(matchExpression, x.iterator().next());
  }
Exemple #27
0
 public void testMaxNumeric() {
   Version v = Version.parseVersion("format(r):M");
   assertNotNull(v);
   assertEquals(Version.parseVersion("raw:M"), v);
 }
  protected void setUp() throws Exception {
    super.setUp();
    a1 = createIU("A", Version.createOSGi(1, 0, 0), true);
    a2 = createIU("A", Version.create("2.0.0"), true);
    b1 = createIU("B", Version.create("1.0.0"), true);
    b2 = createIU("B", Version.create("2.0.0"), true);
    c2 = createIU("C", Version.create("2.0.0"), true);

    IRequirement[] req = new IRequirement[3];
    req[0] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "A",
            new VersionRange("[1.0.0, 1.1.0)"),
            null,
            false,
            true);
    req[1] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "B",
            new VersionRange("[1.0.0, 1.1.0)"),
            null,
            false,
            true);
    req[2] =
        MetadataFactory.createRequirement(
            IInstallableUnit.NAMESPACE_IU_ID,
            "C",
            new VersionRange("[2.0.0, 3.1.0)"),
            null,
            false,
            true);
    f1 = createIU("F", Version.createOSGi(1, 0, 0), req);

    IRequirementChange changeA =
        MetadataFactory.createRequirementChange(
            MetadataFactory.createRequirement(
                IInstallableUnit.NAMESPACE_IU_ID,
                "A",
                VersionRange.emptyRange,
                null,
                false,
                false,
                false),
            MetadataFactory.createRequirement(
                IInstallableUnit.NAMESPACE_IU_ID,
                "A",
                new VersionRange("[2.0.0, 3.0.0)"),
                null,
                false,
                false,
                true));
    IRequirement[][] scope =
        new IRequirement[][] {
          {
            MetadataFactory.createRequirement(
                IInstallableUnit.NAMESPACE_IU_ID,
                "F",
                VersionRange.emptyRange,
                null,
                false,
                false,
                false)
          }
        };
    p1 =
        createIUPatch(
            "P",
            Version.create("1.0.0"),
            null,
            NO_REQUIRES,
            NO_PROVIDES,
            NO_PROPERTIES,
            ITouchpointType.NONE,
            NO_TP_DATA,
            false,
            null,
            new IRequirementChange[] {changeA},
            scope,
            null,
            new IRequirement[0]);

    IRequirementChange changeB =
        MetadataFactory.createRequirementChange(
            MetadataFactory.createRequirement(
                IInstallableUnit.NAMESPACE_IU_ID,
                "B",
                VersionRange.emptyRange,
                null,
                false,
                false,
                false),
            MetadataFactory.createRequirement(
                IInstallableUnit.NAMESPACE_IU_ID,
                "B",
                new VersionRange("[2.0.0, 3.0.0)"),
                null,
                false,
                false,
                true));
    IRequirement[][] scopePP =
        new IRequirement[][] {
          {
            MetadataFactory.createRequirement(
                IInstallableUnit.NAMESPACE_IU_ID,
                "F",
                VersionRange.emptyRange,
                null,
                false,
                false,
                false)
          }
        };
    r1 =
        createIUPatch(
            "R",
            Version.create("1.0.0"),
            null,
            NO_REQUIRES,
            NO_PROVIDES,
            NO_PROPERTIES,
            ITouchpointType.NONE,
            NO_TP_DATA,
            false,
            null,
            new IRequirementChange[] {changeB},
            scopePP,
            null,
            new IRequirement[0]);

    createTestMetdataRepository(new IInstallableUnit[] {a1, a2, b1, b2, c2, f1, p1, r1});

    profile1 = createProfile("TestProfile." + getName());
    planner = createPlanner();
    engine = createEngine();
  }
@SuppressWarnings({"unchecked"})
public class ANYConfigCUsActionTest extends ActionTest {
  private static final String BUNDLE_VERSION = "5.0.0"; // $NON-NLS-1$
  private static final String ORG_ECLIPSE_CORE_COMMANDS =
      "org.eclipse.core.commands"; //$NON-NLS-1$
  private static File configLocation =
      new File(
          TestActivator.getTestDataFolder(),
          "ConfigCUsActionTest/level1/level2/config.ini"); //$NON-NLS-1$
  private static File executableLocation =
      new File(
          TestActivator.getTestDataFolder(), "ConfigCUsActionTest/level1/run.exe"); // $NON-NLS-1$
  private static Version version = Version.create("1.0.0"); // $NON-NLS-1$
  private static String id = "id"; // $NON-NLS-1$
  private static String flavor = "tooling"; // $NON-NLS-1$
  private IMetadataRepository metadataRepo;
  private DataLoader loader;

  public void setUp() throws Exception {

    // configuration spec for creation of filterless CUs
    String[] cfgSpecs = AbstractPublisherAction.parseConfigSpec("ANY"); // $NON-NLS-1$
    configSpec = AbstractPublisherAction.createConfigSpec(cfgSpecs[0], cfgSpecs[1], cfgSpecs[2]);
    setupPublisherInfo();
    setupPublisherResult();
    testAction = new ConfigCUsAction(publisherInfo, flavor, id, version);
  }

  public void testAction() throws Exception {
    testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor());
    verifyAction();
    debug("Completed ConfigCUsAction test."); // $NON-NLS-1$
  }

  private void verifyAction() {
    ArrayList IUs = new ArrayList(publisherResult.getIUs(null, IPublisherResult.ROOT));
    assertTrue(IUs.size() == 1);
    InstallableUnit iu = (InstallableUnit) IUs.get(0);
    assertTrue(iu.getId().equalsIgnoreCase(flavor + id + ".configuration")); // $NON-NLS-1$

    // verify ProvidedCapabilities
    Collection<IProvidedCapability> providedCapabilities = iu.getProvidedCapabilities();
    verifyProvidedCapability(
        providedCapabilities, "org.eclipse.equinox.p2.iu", iu.getId(), version); // $NON-NLS-1$
    assertTrue(providedCapabilities.size() == 1);

    // verify RequiredCapabilities
    List<IRequirement> requiredCapability = iu.getRequirements();
    assertTrue(requiredCapability.size() == 3);
    verifyRequiredCapability(
        requiredCapability,
        IInstallableUnit.NAMESPACE_IU_ID,
        flavor + id + ".config." + configSpec,
        new VersionRange(version, true, version, true)); // $NON-NLS-1$
    verifyRequiredCapability(
        requiredCapability,
        IInstallableUnit.NAMESPACE_IU_ID,
        flavor + id + ".ini." + configSpec,
        new VersionRange(version, true, version, true)); // $NON-NLS-1$
    verifyRequiredCapability(
        requiredCapability,
        IInstallableUnit.NAMESPACE_IU_ID,
        flavor + configSpec + ORG_ECLIPSE_CORE_COMMANDS,
        new VersionRange(version, true, version, true));

    // verify non root IUs
    verifyFragment("ini"); // $NON-NLS-1$
    verifyFragment("config"); // $NON-NLS-1$
    verifyBundleCU();
  }

  private void verifyFragment(String cuType) {
    ArrayList IUs = new ArrayList(publisherResult.getIUs(null, IPublisherResult.NON_ROOT));
    for (int i = 0; i < IUs.size(); i++) {
      InstallableUnit iu = (InstallableUnit) IUs.get(i);
      if (iu.getId()
          .equals(flavor + id + "." + cuType + "." + configSpec)) { // $NON-NLS-1$ //$NON-NLS-2$

        assertNull(iu.getFilter()); // no filter if config spec is ANY

        assertTrue(iu.getVersion().equals(version));

        assertFalse(iu.isSingleton());

        Collection<IProvidedCapability> providedCapabilities = iu.getProvidedCapabilities();
        verifyProvidedCapability(
            providedCapabilities,
            IInstallableUnit.NAMESPACE_IU_ID,
            flavor + id + "." + cuType + "." + configSpec,
            version); //$NON-NLS-1$//$NON-NLS-2$
        verifyProvidedCapability(
            providedCapabilities, flavor + id, id + "." + cuType, version); // $NON-NLS-1$
        assertTrue(providedCapabilities.size() == 2);

        assertTrue(iu.getRequirements().size() == 0);

        if (cuType.equals("ini")) // $NON-NLS-1$
        verifyLauncherArgs(iu);
        if (cuType.equals("config")) // $NON-NLS-1$
        verifyConfigProperties(iu);
        return; // pass
      }
    }
    fail(
        "Configuration unit of type "
            + cuType
            + " was not enocuntered among fragments"); //$NON-NLS-1$
  }

  private void verifyBundleCU() {

    final String bundleCUId = flavor + configSpec + ORG_ECLIPSE_CORE_COMMANDS;
    IQueryResult queryResult =
        publisherResult.query(QueryUtil.createIUQuery(bundleCUId), new NullProgressMonitor());
    assertEquals(1, queryResultSize(queryResult));
    IInstallableUnitFragment fragment = (IInstallableUnitFragment) queryResult.iterator().next();

    assertNull(fragment.getFilter()); // no filter if config spec is ANY

    assertTrue(fragment.getVersion().equals(version));

    assertFalse(fragment.isSingleton());

    final Collection<IProvidedCapability> providedCapabilities = fragment.getProvidedCapabilities();
    verifyProvidedCapability(
        providedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, bundleCUId, version);
    verifyProvidedCapability(
        providedCapabilities,
        "org.eclipse.equinox.p2.flavor",
        flavor + configSpec,
        version); //$NON-NLS-1$
    assertEquals(2, providedCapabilities.size());

    assertEquals(0, fragment.getRequirements().size());

    final Collection<IRequirement> hostRequirements = fragment.getHost();
    verifyRequiredCapability(
        hostRequirements,
        "osgi.bundle",
        ORG_ECLIPSE_CORE_COMMANDS,
        new VersionRange(BUNDLE_VERSION)); // $NON-NLS-1$
    verifyRequiredCapability(
        hostRequirements,
        "org.eclipse.equinox.p2.eclipse.type",
        "bundle",
        new VersionRange(Version.create("1.0.0"), true, Version.create("2.0.0"), false),
        1,
        1,
        false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    assertTrue(hostRequirements.size() == 2);

    final Collection<ITouchpointData> touchpointData = fragment.getTouchpointData();
    assertEquals(1, touchpointData.size());
    ITouchpointData data = touchpointData.iterator().next();
    ITouchpointInstruction instruction = data.getInstruction("install"); // $NON-NLS-1$
    assertEquals("installBundle(bundle:${artifact})", instruction.getBody()); // $NON-NLS-1$
    instruction = data.getInstruction("uninstall"); // $NON-NLS-1$
    assertEquals("uninstallBundle(bundle:${artifact})", instruction.getBody()); // $NON-NLS-1$
    instruction = data.getInstruction("configure"); // $NON-NLS-1$
    assertEquals("setStartLevel(startLevel:2);", instruction.getBody()); // $NON-NLS-1$
    instruction = data.getInstruction("unconfigure"); // $NON-NLS-1$
    assertEquals("setStartLevel(startLevel:-1);", instruction.getBody()); // $NON-NLS-1$
  }

  private void verifyLauncherArgs(IInstallableUnit iu) {
    Collection<ITouchpointData> touchpointData = iu.getTouchpointData();
    assertEquals(1, touchpointData.size());
    ITouchpointData data = touchpointData.iterator().next();
    ITouchpointInstruction instruction = data.getInstruction("configure"); // $NON-NLS-1$
    String body = instruction.getBody();
    assertTrue(
        "arg -foo bar",
        body.indexOf("addProgramArg(programArg:-foo bar);") > -1); // $NON-NLS-1$ //$NON-NLS-2$
    assertTrue(
        "vmarg -agentlib",
        body.indexOf(
                "addJvmArg(jvmArg:-agentlib${#58}jdwp=transport=dt_socket${#44}server=y${#44}suspend=n${#44}address=8272);")
            > -1); //$NON-NLS-1$ //$NON-NLS-2$
    assertTrue(
        "arg -product com,ma",
        body.indexOf("addProgramArg(programArg:-product);addProgramArg(programArg:com${#44}ma);")
            > -1); //$NON-NLS-1$ //$NON-NLS-2$
  }

  private void verifyConfigProperties(IInstallableUnit iu) {
    Collection<ITouchpointData> touchpointData = iu.getTouchpointData();
    assertEquals(1, touchpointData.size());
    ITouchpointData data = touchpointData.iterator().next();
    ITouchpointInstruction instruction = data.getInstruction("configure"); // $NON-NLS-1$
    String body = instruction.getBody();
    assertTrue(
        "eclipse.product",
        body.indexOf(
                "setProgramProperty(propName:eclipse.product,propValue:org.eclipse.platform.ide);")
            > -1); //$NON-NLS-1$ //$NON-NLS-2$
    assertTrue(
        "eclipse.buildId",
        body.indexOf("setProgramProperty(propName:eclipse.buildId,propValue:TEST-ID);")
            > -1); //$NON-NLS-1$ //$NON-NLS-2$
    assertTrue(
        "my.property",
        body.indexOf(
                "setProgramProperty(propName:my.property,propValue:${#123}a${#44}b${#58}c${#59}${#36}d${#125});")
            > -1); //$NON-NLS-1$ //$NON-NLS-2$
  }

  protected void insertPublisherInfoBehavior() {
    loader = new DataLoader(configLocation, executableLocation);

    // configure IExecutableAdvice
    LauncherData launcherData = loader.getLauncherData();
    LaunchingAdvice launchingAdvice = new LaunchingAdvice(launcherData, configSpec);

    ArrayList launchingList = new ArrayList();
    launchingList.add(launchingAdvice);

    ProductFileAdvice productAdvice = null;

    try {
      String productFileLocation =
          TestData.getFile("ProductActionTest", "productFileActionTest.product")
              .toString(); //$NON-NLS-1$ //$NON-NLS-2$
      productAdvice = new ProductFileAdvice(new ProductFile(productFileLocation), configSpec);
      launchingList.add(productAdvice);
    } catch (Exception e) {
      fail("Unable to create product file advice", e); // $NON-NLS-1$
    }

    expect(
            publisherInfo.getAdvice(
                EasyMock.matches(configSpec),
                EasyMock.eq(false),
                (String) EasyMock.anyObject(),
                (Version) EasyMock.anyObject(),
                EasyMock.eq(IExecutableAdvice.class)))
        .andReturn(launchingList)
        .anyTimes();

    // configure IConfigAdvice
    ConfigData configData = loader.getConfigData();
    ConfigAdvice configAdvice = new ConfigAdvice(configData, configSpec);
    ArrayList configList = new ArrayList();
    configList.add(configAdvice);
    configList.add(productAdvice);
    expect(
            publisherInfo.getAdvice(
                EasyMock.matches(configSpec),
                EasyMock.eq(false),
                (String) EasyMock.anyObject(),
                (Version) EasyMock.anyObject(),
                EasyMock.eq(IConfigAdvice.class)))
        .andReturn(configList)
        .anyTimes();

    // setup metadata repository
    IInstallableUnit[] ius = {
      mockIU("foo", null), mockIU("bar", null)
    }; //$NON-NLS-1$ //$NON-NLS-2$

    metadataRepo = new TestMetadataRepository(getAgent(), ius);
    expect(publisherInfo.getMetadataRepository()).andReturn(metadataRepo).anyTimes();
    expect(publisherInfo.getContextMetadataRepository()).andReturn(null).anyTimes();
  }

  @Override
  public void setupPublisherResult() {
    super.setupPublisherResult();

    InstallableUnitDescription iuDescription = new InstallableUnitDescription();
    iuDescription.setId(ORG_ECLIPSE_CORE_COMMANDS);
    iuDescription.setVersion(Version.create(BUNDLE_VERSION));
    IInstallableUnit iu = MetadataFactory.createInstallableUnit(iuDescription);

    publisherResult.addIU(iu, IPublisherResult.NON_ROOT);
  }
}
Exemple #30
0
 public void testArray() {
   Version v = Version.parseVersion("format(r):<1>");
   assertNotNull(v);
   assertEquals(Version.parseVersion("raw:<1>"), v);
 }