Return-Path: X-Original-To: apmail-ace-commits-archive@www.apache.org Delivered-To: apmail-ace-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 935861053F for ; Thu, 10 Oct 2013 14:11:47 +0000 (UTC) Received: (qmail 22763 invoked by uid 500); 10 Oct 2013 14:11:45 -0000 Delivered-To: apmail-ace-commits-archive@ace.apache.org Received: (qmail 22698 invoked by uid 500); 10 Oct 2013 14:11:43 -0000 Mailing-List: contact commits-help@ace.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ace.apache.org Delivered-To: mailing list commits@ace.apache.org Received: (qmail 22663 invoked by uid 99); 10 Oct 2013 14:11:42 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 Oct 2013 14:11:42 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 Oct 2013 14:11:37 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 693EF2388B34; Thu, 10 Oct 2013 14:11:17 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1530984 [4/5] - in /ace/trunk: org.apache.ace.agent.itest/ org.apache.ace.agent.itest/src/org/apache/ace/agent/itest/ org.apache.ace.agent.update.itest/ org.apache.ace.agent.update.itest/conf/ org.apache.ace.agent.update.itest/src/org/apac... Date: Thu, 10 Oct 2013 14:11:14 -0000 To: commits@ace.apache.org From: jawi@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131010141117.693EF2388B34@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java (original) +++ ace/trunk/org.apache.ace.client.repository/test/org/apache/ace/client/repository/impl/ModelTest.java Thu Oct 10 14:11:13 2013 @@ -18,6 +18,10 @@ */ package org.apache.ace.client.repository.impl; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -47,6 +51,7 @@ import org.apache.ace.client.repository. import org.apache.ace.client.repository.repository.DistributionRepository; import org.apache.ace.client.repository.repository.Feature2DistributionAssociationRepository; import org.apache.ace.client.repository.repository.FeatureRepository; +import org.apache.ace.client.repository.repository.RepositoryConfiguration; import org.apache.ace.client.repository.repository.TargetRepository; import org.apache.ace.test.utils.TestUtils; import org.osgi.framework.BundleContext; @@ -59,7 +64,6 @@ import org.osgi.service.prefs.Preference import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; - /** * Test class for the object model used org.apache.ace.client.repository. */ @@ -76,77 +80,16 @@ public class ModelTest { private RepositoryAdminImpl m_repositoryAdmin; private BundleHelperImpl m_bundleHelper = new BundleHelperImpl(); + private BundleContext m_mockBundleContext; + private ChangeNotifier m_mockChangeNotifier; - - @BeforeMethod(alwaysRun = true) - private void initializeRepositoryAdmin() { - BundleContext bc = TestUtils.createMockObjectAdapter(BundleContext.class, new Object() { - @SuppressWarnings("unused") - public Filter createFilter(String filter) throws InvalidSyntaxException { - return createLocalFilter(filter); - } - }); - - ChangeNotifier notifier = TestUtils.createNullObject(ChangeNotifier.class); - - m_artifactRepository = new ArtifactRepositoryImpl(notifier); - TestUtils.configureObject(m_artifactRepository, LogService.class); - TestUtils.configureObject(m_artifactRepository, BundleContext.class, bc); - m_artifactRepository.addHelper(BundleHelper.MIMETYPE, m_bundleHelper); - m_featureRepository = new FeatureRepositoryImpl(notifier); - TestUtils.configureObject(m_featureRepository, BundleContext.class, bc); - m_artifact2FeatureRepository = new Artifact2FeatureAssociationRepositoryImpl(m_artifactRepository, m_featureRepository, notifier); - TestUtils.configureObject(m_artifact2FeatureRepository, BundleContext.class, bc); - m_distributionRepository = new DistributionRepositoryImpl(notifier); - TestUtils.configureObject(m_distributionRepository, BundleContext.class, bc); - m_feature2DistributionRepository = new Feature2DistributionAssociationRepositoryImpl(m_featureRepository, m_distributionRepository, notifier); - TestUtils.configureObject(m_feature2DistributionRepository, BundleContext.class, bc); - m_targetRepository = new TargetRepositoryImpl(notifier); - TestUtils.configureObject(m_targetRepository, BundleContext.class, bc); - m_distribution2TargetRepository = new Distribution2TargetAssociationRepositoryImpl(m_distributionRepository, m_targetRepository, notifier); - TestUtils.configureObject(m_distribution2TargetRepository, BundleContext.class, bc); - m_deploymentVersionRepository = new DeploymentVersionRepositoryImpl(notifier); - TestUtils.configureObject(m_deploymentVersionRepository, BundleContext.class, bc); - - m_repositoryAdmin = new RepositoryAdminImpl("testSessionID"); - - Map, ObjectRepositoryImpl> repos = new HashMap, ObjectRepositoryImpl>(); - repos.put(ArtifactRepository.class, m_artifactRepository); - repos.put(Artifact2FeatureAssociationRepository.class, m_artifact2FeatureRepository); - repos.put(FeatureRepository.class, m_featureRepository); - repos.put(Feature2DistributionAssociationRepository.class, m_feature2DistributionRepository); - repos.put(DistributionRepository.class, m_distributionRepository); - repos.put(Distribution2TargetAssociationRepository.class, m_distribution2TargetRepository); - repos.put(TargetRepository.class, m_targetRepository); - repos.put(DeploymentVersionRepository.class, m_deploymentVersionRepository); - - m_repositoryAdmin.initialize(repos); - TestUtils.configureObject(m_repositoryAdmin, Preferences.class); - TestUtils.configureObject(m_repositoryAdmin, PreferencesService.class); - } - - /** - * Tests that we can create artifacts which contain a certain size (estimate). See ACE-384. - */ - @Test( groups = { TestUtils.UNIT } ) - public void testArtifactObjectSize() { - ArtifactObject artifactWithSize = createBasicArtifactObject("myartifact", "1.0.0", "10"); - assert artifactWithSize.getSize() == 10 : "The artifact did not have a valid size?!"; - - ArtifactObject artifactWithoutSize = createBasicArtifactObject("artifactWithoutSize", "1.0.0", null); - assert artifactWithoutSize.getSize() == -1L : "The artifact did have a size?!"; - - ArtifactObject artifactWithInvalidSize = createBasicArtifactObject("artifactWithInvalidSize", "1.0.0", "xyz"); - assert artifactWithInvalidSize.getSize() == -1L : "The artifact did have a size?!"; - } - /** - * The artifact object can test functionality coming from - * RepositoryObjectImpl, and ArtifactRepository checks much of - * ObjectRepositoryImpl. + * The artifact object can test functionality coming from RepositoryObjectImpl, and ArtifactRepository checks much + * of ObjectRepositoryImpl. + * * @throws InvalidSyntaxException */ - @Test( groups = { TestUtils.UNIT } ) + @Test(groups = { TestUtils.UNIT }) public void testArtifactObjectAndRepository() throws InvalidSyntaxException { // Create a very simple artifact. ArtifactObject a = createBasicArtifactObject("myartifact", "1.0.0", "1"); @@ -169,7 +112,7 @@ public class ModelTest { a.addTag("mytag", "myvalue"); - assert a.getTag("mytag").equals("myvalue") : "We should be able to read an attribute we just put in ourselves."; + assert a.getTag("mytag").equals("myvalue") : "We should be able to read an attribute we just put in ourselves."; assert a.getTag(BundleHelper.KEY_SYMBOLICNAME) == null : "We should not find an attribute value when asking for a tag."; a.addTag(BundleHelper.KEY_SYMBOLICNAME, "mytagname"); @@ -183,7 +126,7 @@ public class ModelTest { String[] foundNames = (String[]) dict.get(BundleHelper.KEY_SYMBOLICNAME); assert foundNames.length == 2 : "For keys which are used both as a value and as a tag, we should get back both from the dictionary in an array."; assert (foundNames[0].equals("myartifact") && foundNames[1].equals("mytagname")) || - (foundNames[1].equals("myartifact") && foundNames[0].equals("mytagname")) : "The order is undefined, but we should find both the items we put in for '"+BundleHelper.KEY_SYMBOLICNAME+"'."; + (foundNames[1].equals("myartifact") && foundNames[0].equals("mytagname")) : "The order is undefined, but we should find both the items we put in for '" + BundleHelper.KEY_SYMBOLICNAME + "'."; assert m_artifactRepository.get().size() == 1 : "The repository should contain exactly one artifact."; assert m_artifactRepository.get().get(0).equals(a) : "The repository should contain exactly our artifact."; @@ -198,7 +141,7 @@ public class ModelTest { assert false : "Adding a artifact which is identical to one already in the repository should be illegal."; } catch (IllegalArgumentException iae) { - //expected + // expected } try { @@ -213,10 +156,9 @@ public class ModelTest { assert false : "Changing key attributes in a artifact should not be allowed."; } catch (UnsupportedOperationException uoe) { - //expected + // expected } - try { Map attr = new HashMap(); attr.put(BundleHelper.KEY_NAME, "mynewartifact"); @@ -225,10 +167,9 @@ public class ModelTest { assert false : "Creating a artifact without specifying all mandatory atttributes should be illegal."; } catch (IllegalArgumentException iae) { - //expected + // expected } - m_artifactRepository.remove(a); try { @@ -243,95 +184,25 @@ public class ModelTest { assert m_artifactRepository.get().get(0).equals(b2) : "After removing our first artifact, the repository should contain only our second artifact."; } - @Test( groups = { TestUtils.UNIT } ) - public void testRepositorySerialization() throws IOException { - createBasicArtifactObject("myartifact", "1"); - createBasicArtifactObject("myartifact", "2"); - - // Write the store to a stream, reset the repository, and re-read it. - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - RepositorySet store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] {m_artifactRepository, m_artifact2FeatureRepository, m_featureRepository}, null, "", true); - new RepositorySerializer(store).toXML(buffer); - initializeRepositoryAdmin(); - store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] {m_artifactRepository, m_artifact2FeatureRepository, m_featureRepository}, null, "", true); - new RepositorySerializer(store).fromXML(new ByteArrayInputStream(buffer.toByteArray())); - - assert m_artifactRepository.get().size() == 2 : "We expect to find 2 artifacts, but we find " + m_artifactRepository.get().size(); - } - - @Test( groups = { TestUtils.UNIT } ) - public void testSerialization() throws IOException { - ArtifactObject b1 = createBasicArtifactObject("artifact1"); - ArtifactObject b2 = createBasicArtifactObject("artifact2"); - ArtifactObject b3 = createBasicArtifactObject("artifact3"); - - FeatureObject g1 = createBasicFeatureObject("feature1"); - FeatureObject g2 = createBasicFeatureObject("feature2"); - - m_artifact2FeatureRepository.create(b1, g1); - m_artifact2FeatureRepository.create(b2, g2); - m_artifact2FeatureRepository.create(b3, g2); - - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - RepositorySet store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] {m_artifactRepository, m_featureRepository, m_artifact2FeatureRepository}, null, "", true); - new RepositorySerializer(store).toXML(buffer); - initializeRepositoryAdmin(); - store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] {m_artifactRepository, m_featureRepository, m_artifact2FeatureRepository}, null, "", true); - new RepositorySerializer(store).fromXML(new ByteArrayInputStream(buffer.toByteArray())); - - assert m_artifactRepository.get().size() == 3 : "We expect to find 3 artifacts, but we find " + m_artifactRepository.get().size(); - assert m_featureRepository.get().size() == 2 : "We expect to find 2 features, but we find " + m_featureRepository.get().size(); - assert m_artifact2FeatureRepository.get().size() == 3 : "We expect to find 3 associations, but we find " + m_artifact2FeatureRepository.get().size(); - assert b1.isAssociated(g1, FeatureObject.class) : "After serialization, b1 should still be associated with g1."; - assert !b1.isAssociated(g2, FeatureObject.class) : "After serialization, b1 should not be associated with g1."; - assert !b2.isAssociated(g1, FeatureObject.class) : "After serialization, b2 should not be associated with g2."; - assert b2.isAssociated(g2, FeatureObject.class) : "After serialization, b2 should still be associated with g2."; - assert !b3.isAssociated(g1, FeatureObject.class) : "After serialization, b3 should not be associated with g2."; - assert b3.isAssociated(g2, FeatureObject.class) : "After serialization, b3 should still be associated with g2."; - } - - @Test( groups = { TestUtils.UNIT } ) - public void testModelFiltering() throws InvalidSyntaxException { - initializeRepositoryAdmin(); - // Create an empty artifact repository. - Map attributes = new HashMap(); - attributes.put("myattribute", "theattribute"); - attributes.put("name", "attname"); - Map tags = new HashMap(); - - assert m_featureRepository != null : "Something has gone wrong injecting the feature repository."; - FeatureObject g1 = m_featureRepository.create(attributes, tags); - g1.addTag("mytag", "thetag"); - g1.addTag("name", "tagname"); - g1.addTag("difficult", ")diffi)c*ul\\t"); - - - assert m_featureRepository.get(createLocalFilter("(myattribute=*)")).size() == 1 : "There should be a myattribute in b1."; - assert m_featureRepository.get(createLocalFilter("(myattribute=theattribute)")).size() == 1 : "There should be myattribute=theattribute in b1."; - assert m_featureRepository.get(createLocalFilter("(myattribute=thetag)")).size() == 0 : "There should not be myattribute=thetag in b1."; - assert m_featureRepository.get(createLocalFilter("(mytag=*)")).size() == 1 : "There should be a mytag in b1."; - assert m_featureRepository.get(createLocalFilter("(mytag=thetag)")).size() == 1 : "There should be mytag=thetag in b1."; - assert m_featureRepository.get(createLocalFilter("(mytag=theattribute)")).size() == 0 : "There should not be mytag=theattribute in b1."; + /** + * Tests that we can create artifacts which contain a certain size (estimate). See ACE-384. + */ + @Test(groups = { TestUtils.UNIT }) + public void testArtifactObjectSize() { + ArtifactObject artifactWithSize = createBasicArtifactObject("myartifact", "1.0.0", "10"); + assert artifactWithSize.getSize() == 10 : "The artifact did not have a valid size?!"; - assert m_featureRepository.get(createLocalFilter("(name=*)")).size() == 1 : "There should be a name parameter in b1."; - assert m_featureRepository.get(createLocalFilter("(name=attname)")).size() == 1 : "There should be a name=attname in b1."; - assert m_featureRepository.get(createLocalFilter("(name=tagname)")).size() == 1 : "There should be a name=tagname in b1."; - assert m_featureRepository.get(createLocalFilter("(name=thetag)")).size() == 0 : "There should not be name=thetag in b1."; + ArtifactObject artifactWithoutSize = createBasicArtifactObject("artifactWithoutSize", "1.0.0", null); + assert artifactWithoutSize.getSize() == -1L : "The artifact did have a size?!"; - try { - m_featureRepository.get(createLocalFilter("(difficult=)diffi)c*ul\\t")); - assert false : "The non-escaped difficult string should raise an error."; - } - catch (InvalidSyntaxException ex) { - //expected - } - assert m_featureRepository.get(createLocalFilter("(difficult=" + RepositoryUtil.escapeFilterValue(")diffi)c*ul\\t") + ")")).size() == 1 : "The 'difficult' string should be correctly escaped, and thus return exactly one match."; + ArtifactObject artifactWithInvalidSize = createBasicArtifactObject("artifactWithInvalidSize", "1.0.0", "xyz"); + assert artifactWithInvalidSize.getSize() == -1L : "The artifact did have a size?!"; } /** * Tests the behavior when associating stuff, and removing associations. */ - @Test( groups = { TestUtils.UNIT } ) + @Test(groups = { TestUtils.UNIT }) public void testAssociations() { initializeRepositoryAdmin(); // Create two, rather boring, artifacts. @@ -417,100 +288,133 @@ public class ModelTest { assert g3artifacts.containsAll(g3expectedArtifacts) && g3expectedArtifacts.containsAll(g3artifacts) : "g3 should be associated to exactly artifact 1."; } + @Test(groups = { TestUtils.UNIT }) + public void testAssociationsWithCardinality() { + ArtifactObject a1 = createBasicArtifactObject("a1"); + FeatureObject f1 = createBasicFeatureObject("f1"); + FeatureObject f2 = createBasicFeatureObject("f2"); + FeatureObject f3 = createBasicFeatureObject("f3"); - /** - * Not a full-fledged testcase, but a quick test of the correctness of the - * specified classes for features, distributions and their associations. In essence, - * this test 'touches' all code which uses generic code which has been tested - * by TestAssociations. - */ - @Test( groups = { TestUtils.UNIT } ) - public void TestFeature2DistributionAssociations() { - initializeRepositoryAdmin(); - FeatureObject f1 = createBasicFeatureObject("feature1"); - DistributionObject d1 = createBasicDistributionObject("distribution1"); - Feature2DistributionAssociation f2d1 = m_feature2DistributionRepository.create(f1, d1); - - assert (f2d1.getLeft().size() == 1) && f2d1.getLeft().contains(f1) : "Left side of the association should be our feature."; - assert (f2d1.getRight().size() == 1) && f2d1.getRight().contains(d1) : "Right side of the association should be our distribution."; - - assert f1.getArtifacts().size() == 0 : "Feature 1 should not be associated with any artifacts; it is associated with " + f1.getArtifacts().size() + "."; - assert f1.getDistributions().size() == 1 : "Feature 1 should be associated with exactly one distribution; it is associated with " + f1.getDistributions().size() + "."; + Map props = new HashMap(); + props.put(Association.LEFT_ENDPOINT, "(" + BundleHelper.KEY_SYMBOLICNAME + "=a1)"); + props.put(Association.LEFT_CARDINALITY, "1"); + props.put(Association.RIGHT_ENDPOINT, "(" + FeatureObject.KEY_NAME + "=f*)"); + props.put(Association.RIGHT_CARDINALITY, "2"); + Map tags = new HashMap(); - assert d1.getFeatures().size() == 1 : "Distribution 1 should be associated with exactly one feature; it is associated with " + d1.getFeatures().size() + "."; - assert d1.getTargets().size() == 0 : "Distribution 1 should not be associated with any targets; it is associated with " + d1.getTargets().size() + "."; - } + try { + m_artifact2FeatureRepository.create(props, tags); + assert false : "There are three matches for the feature, but we have a cardinality of 2; we should expect a NPE because no comparator is provided."; + } + catch (NullPointerException npe) { + // expected + } - /** - * Not a full-fledged testcase, but a quick test of the correctness of the - * specified classes for distributions, targets and their associations. In essence, - * this test 'touches' all code which uses generic code which has been tested - * by TestAssociations. - */ - @Test( groups = { TestUtils.UNIT } ) - public void testDistribution2TargetAssociations() { - initializeRepositoryAdmin(); - DistributionObject d1 = createBasicDistributionObject("distribution1"); - TargetObject t1 = createBasicTargetObject("target1"); - m_distribution2TargetRepository.create(d1, t1); + props.put(Association.RIGHT_CARDINALITY, "3"); - assert d1.getFeatures().size() == 0 : "Distribution 1 should not be associated with any features; it is associated with " + d1.getFeatures().size() + "."; - assert d1.getTargets().size() == 1 : "Distribution 1 should be associated with exactly one target; it is associated with " + d1.getTargets().size() + "."; + Artifact2FeatureAssociation bg = m_artifact2FeatureRepository.create(props, tags); + assert bg != null : "Assocating artifact to feature failed?!"; - assert t1.getDistributions().size() == 1 : "Target 1 should be associated with exactly one distribution; it is associated with " + t1.getDistributions().size() + "."; + assert a1.getFeatures().size() == 3 : "The artifact should be associated to three features."; + assert (f1.getArtifacts().size() == 1) && f1.getArtifacts().contains(a1) : "g1 should be associated to only b1."; + assert (f2.getArtifacts().size() == 1) && f2.getArtifacts().contains(a1) : "g1 should be associated to only b1."; + assert (f3.getArtifacts().size() == 1) && f3.getArtifacts().contains(a1) : "g1 should be associated to only b1."; } - @Test( groups = { TestUtils.UNIT } ) - public void testGetAssociationsWith() { - initializeRepositoryAdmin(); - ArtifactObject a1 = createBasicArtifactObject("artifact1"); - FeatureObject f1 = createBasicFeatureObject("feature1"); - Artifact2FeatureAssociation a2f1 = m_artifact2FeatureRepository.create(a1, f1); + @Test(groups = { TestUtils.UNIT }) + public void testAssociationsWithLists() { + ArtifactObject b1 = createBasicArtifactObject("b1"); + ArtifactObject b2 = createBasicArtifactObject("b2"); + ArtifactObject b3 = createBasicArtifactObject("b3"); + FeatureObject g1 = createBasicFeatureObject("g1"); + FeatureObject g2 = createBasicFeatureObject("g2"); + FeatureObject g3 = createBasicFeatureObject("g3"); - List b1Associations = a1.getAssociationsWith(f1); - List g1Associations = f1.getAssociationsWith(a1); + List artifacts = new ArrayList(); + artifacts.add(b1); + artifacts.add(b2); + List features = new ArrayList(); + features.add(g1); + features.add(g3); - assert b1Associations.size() == 1 : "The artifact has exactly one association to the feature, but it shows " + b1Associations.size() + "."; - assert b1Associations.get(0) == a2f1 : "The artifact's association should be the one we created."; + Artifact2FeatureAssociation bg = m_artifact2FeatureRepository.create(artifacts, features); - assert g1Associations.size() == 1 : "The feature has exactly one association to the artifact."; - assert g1Associations.get(0) == a2f1 : "The feature's association should be the one we created."; - } + assert bg.getLeft().size() == 2 : "We expect two artifacts on the left side of the association."; + assert bg.getRight().size() == 2 : "We expect two features on the right side of the association."; - /** - * Tests the correctness of the equals() in RepositoryObject. - */ - @Test( groups = { TestUtils.UNIT } ) - public void testEquals() { - List artifacts = new ArrayList(); - artifacts.add(createBasicArtifactObject("artifact1")); - artifacts.add(createBasicArtifactObject("artifact2")); - artifacts.get(1).addTag("thetag", "thevalue"); - artifacts.add(createBasicArtifactObject("artifact3")); + assert bg.getLeft().contains(b1) : "b1 should be on the left side of the association."; + assert bg.getLeft().contains(b2) : "b2 should be on the left side of the association."; + assert !bg.getLeft().contains(b3) : "b3 should not be on the left side of the association."; + assert bg.getRight().contains(g1) : "g1 should be on the right side of the association."; + assert !bg.getRight().contains(g2) : "g2 should not be on the right side of the association."; + assert bg.getRight().contains(g3) : "g3 should be on the right side of the association."; - List backupArtifacts = new ArrayList(); - backupArtifacts.addAll(artifacts); + List foundFeatures = b1.getFeatures(); + assert foundFeatures.size() == 2 : "b1 should be associated with two features."; + assert foundFeatures.contains(g1) : "b1 should be associated with g1"; + assert !foundFeatures.contains(g2) : "b1 not should be associated with g2"; + assert foundFeatures.contains(g3) : "b1 should be associated with g3"; - for (ArtifactObject b : backupArtifacts) { - artifacts.remove(b); - } + foundFeatures = b3.getFeatures(); + assert foundFeatures.size() == 0 : "b3 should not be associated with any features."; - assert artifacts.size() == 0 : "The artifacts list should be empty; if not, the ArtifactObject's equals() could be broken."; + List foundArtifacts = g3.getArtifacts(); + assert foundArtifacts.size() == 2 : "g1 should be associated with two features."; + assert foundArtifacts.contains(b1) : "g1 should be associated with b1"; + assert foundArtifacts.contains(b2) : "g1 should be associated with b2"; + assert !foundArtifacts.contains(b3) : "g1 should not be associated with b3"; } - @Test( groups = { TestUtils.UNIT } ) - public void testDeploymentVersion() throws IOException { - DeploymentVersionObject version = createBasicDeploymentVersionObject("target1", "1", new String[] {"artifact1", "artifact2"}); + @Test(groups = { TestUtils.UNIT }) + public void testDeploymentRepository() { + DeploymentVersionObject version11 = createBasicDeploymentVersionObject("target1", "1", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject version12 = createBasicDeploymentVersionObject("target1", "2", new String[] { "artifact3", "artifact4" }); + // Note the different order in adding the versions for target2. + DeploymentVersionObject version22 = createBasicDeploymentVersionObject("target2", "2", new String[] { "artifactC", "artifactD" }); + DeploymentVersionObject version21 = createBasicDeploymentVersionObject("target2", "1", new String[] { "artifactA", "artifactB" }); - assert version.getDeploymentArtifacts().length == 2 : "We expect to find two artifacts, but we find " + version.getDeploymentArtifacts().length; - assert version.getDeploymentArtifacts()[0].getUrl().equals("artifact1"); - assert version.getDeploymentArtifacts()[1].getUrl().equals("artifact2"); + assert m_deploymentVersionRepository.getDeploymentVersions("NotMyTarget").size() == 0 : "The deployment repository should not return" + + "any versions when we ask for a target that does not exist, but it returns " + m_deploymentVersionRepository.getDeploymentVersions("NotMyTarget").size(); - ((DeploymentArtifactImpl) version.getDeploymentArtifacts()[0]).addDirective("myDirective", "myValue"); + List for1 = m_deploymentVersionRepository.getDeploymentVersions("target1"); + assert for1.size() == 2 : "We expect two versions for target1, but we find " + for1.size(); + assert for1.get(0) == version11 : "The first version for target1 should be version11"; + assert for1.get(1) == version12 : "The second version for target1 should be version12"; - try { - createBasicDeploymentVersionObject("target1", "1", new String[] {"artifact1", "artifact2"}); - assert false : "Creating a deployment version with a target and version that already exists should not be allowed."; + List for2 = m_deploymentVersionRepository.getDeploymentVersions("target2"); + assert for2.size() == 2 : "We expect two versions for target2, but we find " + for2.size(); + assert for2.get(0) == version21 : "The first version for target2 should be version21"; + assert for2.get(1) == version22 : "The second version for target2 should be version22"; + + assert m_deploymentVersionRepository.getMostRecentDeploymentVersion("NotMyTarget") == null : "The most recent version for a non-existent target should not exist."; + assert m_deploymentVersionRepository.getMostRecentDeploymentVersion("target1") == version12 : "The most recent version for target1 should be version12"; + assert m_deploymentVersionRepository.getMostRecentDeploymentVersion("target2") == version22 : "The most recent version for target2 should be version22"; + } + + @Test(groups = { TestUtils.UNIT }) + public void testDeploymentRepositoryFilter() { + + String gwId = "\\ ( * ) target1)"; + DeploymentVersionObject version1 = createBasicDeploymentVersionObject(gwId, "1", new String[] { "artifact1", "artifact2" }); + + List for1 = m_deploymentVersionRepository.getDeploymentVersions(gwId); + assert for1.size() == 1 : "We expect one version for" + gwId + ", but we find " + for1.size(); + assert for1.get(0) == version1 : "The only version for" + gwId + "should be version1"; + } + + @Test(groups = { TestUtils.UNIT }) + public void testDeploymentVersion() throws IOException { + DeploymentVersionObject version = createBasicDeploymentVersionObject("target1", "1", new String[] { "artifact1", "artifact2" }); + + assert version.getDeploymentArtifacts().length == 2 : "We expect to find two artifacts, but we find " + version.getDeploymentArtifacts().length; + assert version.getDeploymentArtifacts()[0].getUrl().equals("artifact1"); + assert version.getDeploymentArtifacts()[1].getUrl().equals("artifact2"); + + ((DeploymentArtifactImpl) version.getDeploymentArtifacts()[0]).addDirective("myDirective", "myValue"); + + try { + createBasicDeploymentVersionObject("target1", "1", new String[] { "artifact1", "artifact2" }); + assert false : "Creating a deployment version with a target and version that already exists should not be allowed."; } catch (IllegalArgumentException iae) { // expected @@ -520,16 +424,15 @@ public class ModelTest { assert m_deploymentVersionRepository.get().get(0) == version : "Only our newly created version object should be in the repository."; ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - RepositorySet deployment = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] {m_deploymentVersionRepository}, null, "", true); + RepositorySet deployment = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] { m_deploymentVersionRepository }, null, "", true); new RepositorySerializer(deployment).toXML(buffer); initializeRepositoryAdmin(); assert m_deploymentVersionRepository.get().size() == 0; - deployment = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] {m_deploymentVersionRepository}, null, "", true); + deployment = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] { m_deploymentVersionRepository }, null, "", true); new RepositorySerializer(deployment).fromXML(new ByteArrayInputStream(buffer.toByteArray())); - assert m_deploymentVersionRepository.get().size() == 1 : "The disallowed version should not be in the repository."; assert m_deploymentVersionRepository.get().get(0).equals(version) : "Only our newly created version object should be in the repository."; @@ -540,122 +443,263 @@ public class ModelTest { assert m_deploymentVersionRepository.get().get(0).getDeploymentArtifacts()[1].getUrl().equals("artifact2"); } - @Test( groups = { TestUtils.UNIT } ) - public void testDeploymentRepository() { - DeploymentVersionObject version11 = createBasicDeploymentVersionObject("target1", "1", new String[] {"artifact1", "artifact2"}); - DeploymentVersionObject version12 = createBasicDeploymentVersionObject("target1", "2", new String[] {"artifact3", "artifact4"}); - // Note the different order in adding the versions for target2. - DeploymentVersionObject version22 = createBasicDeploymentVersionObject("target2", "2", new String[] {"artifactC", "artifactD"}); - DeploymentVersionObject version21 = createBasicDeploymentVersionObject("target2", "1", new String[] {"artifactA", "artifactB"}); - - assert m_deploymentVersionRepository.getDeploymentVersions("NotMyTarget").size() == 0 : "The deployment repository should not return" + - "any versions when we ask for a target that does not exist, but it returns " + m_deploymentVersionRepository.getDeploymentVersions("NotMyTarget").size(); - - List for1 = m_deploymentVersionRepository.getDeploymentVersions("target1"); - assert for1.size() == 2 : "We expect two versions for target1, but we find " + for1.size(); - assert for1.get(0) == version11 : "The first version for target1 should be version11"; - assert for1.get(1) == version12 : "The second version for target1 should be version12"; + /** + * Not a full-fledged testcase, but a quick test of the correctness of the specified classes for distributions, + * targets and their associations. In essence, this test 'touches' all code which uses generic code which has been + * tested by TestAssociations. + */ + @Test(groups = { TestUtils.UNIT }) + public void testDistribution2TargetAssociations() { + initializeRepositoryAdmin(); + DistributionObject d1 = createBasicDistributionObject("distribution1"); + TargetObject t1 = createBasicTargetObject("target1"); + m_distribution2TargetRepository.create(d1, t1); - List for2 = m_deploymentVersionRepository.getDeploymentVersions("target2"); - assert for2.size() == 2 : "We expect two versions for target2, but we find " + for2.size(); - assert for2.get(0) == version21 : "The first version for target2 should be version21"; - assert for2.get(1) == version22 : "The second version for target2 should be version22"; + assert d1.getFeatures().size() == 0 : "Distribution 1 should not be associated with any features; it is associated with " + d1.getFeatures().size() + "."; + assert d1.getTargets().size() == 1 : "Distribution 1 should be associated with exactly one target; it is associated with " + d1.getTargets().size() + "."; - assert m_deploymentVersionRepository.getMostRecentDeploymentVersion("NotMyTarget") == null : "The most recent version for a non-existent target should not exist."; - assert m_deploymentVersionRepository.getMostRecentDeploymentVersion("target1") == version12 : "The most recent version for target1 should be version12"; - assert m_deploymentVersionRepository.getMostRecentDeploymentVersion("target2") == version22 : "The most recent version for target2 should be version22"; + assert t1.getDistributions().size() == 1 : "Target 1 should be associated with exactly one distribution; it is associated with " + t1.getDistributions().size() + "."; } - @Test( groups = { TestUtils.UNIT } ) - public void testDeploymentRepositoryFilter() { + /** + * Tests the correctness of the equals() in RepositoryObject. + */ + @Test(groups = { TestUtils.UNIT }) + public void testEquals() { + List artifacts = new ArrayList(); + artifacts.add(createBasicArtifactObject("artifact1")); + artifacts.add(createBasicArtifactObject("artifact2")); + artifacts.get(1).addTag("thetag", "thevalue"); + artifacts.add(createBasicArtifactObject("artifact3")); - String gwId = "\\ ( * ) target1)"; - DeploymentVersionObject version1 = createBasicDeploymentVersionObject(gwId, "1", new String[] {"artifact1", "artifact2"}); + List backupArtifacts = new ArrayList(); + backupArtifacts.addAll(artifacts); - List for1 = m_deploymentVersionRepository.getDeploymentVersions( gwId ); - assert for1.size() == 1 : "We expect one version for" + gwId + ", but we find " + for1.size(); - assert for1.get(0) == version1 : "The only version for" + gwId + "should be version1"; + for (ArtifactObject b : backupArtifacts) { + artifacts.remove(b); + } + + assert artifacts.size() == 0 : "The artifacts list should be empty; if not, the ArtifactObject's equals() could be broken."; } - @Test( groups = { TestUtils.UNIT } ) - public void testAssociationsWithLists() { - ArtifactObject b1 = createBasicArtifactObject("b1"); - ArtifactObject b2 = createBasicArtifactObject("b2"); - ArtifactObject b3 = createBasicArtifactObject("b3"); - FeatureObject g1 = createBasicFeatureObject("g1"); - FeatureObject g2 = createBasicFeatureObject("g2"); - FeatureObject g3 = createBasicFeatureObject("g3"); + /** + * Not a full-fledged testcase, but a quick test of the correctness of the specified classes for features, + * distributions and their associations. In essence, this test 'touches' all code which uses generic code which has + * been tested by TestAssociations. + */ + @Test(groups = { TestUtils.UNIT }) + public void TestFeature2DistributionAssociations() { + initializeRepositoryAdmin(); + FeatureObject f1 = createBasicFeatureObject("feature1"); + DistributionObject d1 = createBasicDistributionObject("distribution1"); + Feature2DistributionAssociation f2d1 = m_feature2DistributionRepository.create(f1, d1); - List artifacts = new ArrayList(); - artifacts.add(b1); - artifacts.add(b2); - List features = new ArrayList(); - features.add(g1); - features.add(g3); + assert (f2d1.getLeft().size() == 1) && f2d1.getLeft().contains(f1) : "Left side of the association should be our feature."; + assert (f2d1.getRight().size() == 1) && f2d1.getRight().contains(d1) : "Right side of the association should be our distribution."; - Artifact2FeatureAssociation bg = m_artifact2FeatureRepository.create(artifacts, features); + assert f1.getArtifacts().size() == 0 : "Feature 1 should not be associated with any artifacts; it is associated with " + f1.getArtifacts().size() + "."; + assert f1.getDistributions().size() == 1 : "Feature 1 should be associated with exactly one distribution; it is associated with " + f1.getDistributions().size() + "."; - assert bg.getLeft().size() == 2 : "We expect two artifacts on the left side of the association."; - assert bg.getRight().size() == 2 : "We expect two features on the right side of the association."; + assert d1.getFeatures().size() == 1 : "Distribution 1 should be associated with exactly one feature; it is associated with " + d1.getFeatures().size() + "."; + assert d1.getTargets().size() == 0 : "Distribution 1 should not be associated with any targets; it is associated with " + d1.getTargets().size() + "."; + } - assert bg.getLeft().contains(b1) : "b1 should be on the left side of the association."; - assert bg.getLeft().contains(b2) : "b2 should be on the left side of the association."; - assert !bg.getLeft().contains(b3) : "b3 should not be on the left side of the association."; - assert bg.getRight().contains(g1) : "g1 should be on the right side of the association."; - assert !bg.getRight().contains(g2) : "g2 should not be on the right side of the association."; - assert bg.getRight().contains(g3) : "g3 should be on the right side of the association."; + @Test(groups = { TestUtils.UNIT }) + public void testGetAssociationsWith() { + initializeRepositoryAdmin(); + ArtifactObject a1 = createBasicArtifactObject("artifact1"); + FeatureObject f1 = createBasicFeatureObject("feature1"); + Artifact2FeatureAssociation a2f1 = m_artifact2FeatureRepository.create(a1, f1); - List foundFeatures = b1.getFeatures(); - assert foundFeatures.size() == 2 : "b1 should be associated with two features."; - assert foundFeatures.contains(g1) : "b1 should be associated with g1"; - assert !foundFeatures.contains(g2) : "b1 not should be associated with g2"; - assert foundFeatures.contains(g3) : "b1 should be associated with g3"; + List b1Associations = a1.getAssociationsWith(f1); + List g1Associations = f1.getAssociationsWith(a1); - foundFeatures = b3.getFeatures(); - assert foundFeatures.size() == 0 : "b3 should not be associated with any features."; + assert b1Associations.size() == 1 : "The artifact has exactly one association to the feature, but it shows " + b1Associations.size() + "."; + assert b1Associations.get(0) == a2f1 : "The artifact's association should be the one we created."; - List foundArtifacts = g3.getArtifacts(); - assert foundArtifacts.size() == 2 : "g1 should be associated with two features."; - assert foundArtifacts.contains(b1) : "g1 should be associated with b1"; - assert foundArtifacts.contains(b2) : "g1 should be associated with b2"; - assert !foundArtifacts.contains(b3) : "g1 should not be associated with b3"; + assert g1Associations.size() == 1 : "The feature has exactly one association to the artifact."; + assert g1Associations.get(0) == a2f1 : "The feature's association should be the one we created."; } - @Test( groups = { TestUtils.UNIT } ) - public void testAssociationsWithCardinality() { - ArtifactObject a1 = createBasicArtifactObject("a1"); - FeatureObject f1 = createBasicFeatureObject("f1"); - FeatureObject f2 = createBasicFeatureObject("f2"); - FeatureObject f3 = createBasicFeatureObject("f3"); + @Test(groups = { TestUtils.UNIT }) + public void testLimitedNumberOfDeploymentVersions() throws IOException { + RepositoryConfigurationImpl repoConfig = new RepositoryConfigurationImpl(); + repoConfig.setDeploymentVersionLimit(3); // only keep the 3 most recent deployment versions... + + m_deploymentVersionRepository = new DeploymentVersionRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_deploymentVersionRepository, BundleContext.class, m_mockBundleContext); + + // Add several bundles, but not enough to get any deployment version purged... + DeploymentVersionObject target1_v1 = createBasicDeploymentVersionObject("target1", "1", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject target1_v2 = createBasicDeploymentVersionObject("target1", "2", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject target1_v3 = createBasicDeploymentVersionObject("target1", "3", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject target2_v1 = createBasicDeploymentVersionObject("target2", "1", new String[] { "artifact3", "artifact4" }); + DeploymentVersionObject target2_v2 = createBasicDeploymentVersionObject("target2", "2", new String[] { "artifact3", "artifact5" }); + + List repo = m_deploymentVersionRepository.get(); + // All created deployment versions should be present... + assertEquals(repo.size(), 5); + assertTrue(repo.contains(target1_v1)); + assertTrue(repo.contains(target1_v2)); + assertTrue(repo.contains(target1_v3)); + assertTrue(repo.contains(target2_v1)); + assertTrue(repo.contains(target2_v2)); + + // Add a new deployment version, which should cause the oldest (= version 1) of target1 to be purged... + DeploymentVersionObject target1_v4 = createBasicDeploymentVersionObject("target1", "4", new String[] { "artifact1", "artifact2" }); + + repo = m_deploymentVersionRepository.get(); + // Still 5 deployment versions, without version 1 of target1... + assertEquals(repo.size(), 5); + assertFalse(repo.contains(target1_v1)); + assertTrue(repo.contains(target1_v2)); + assertTrue(repo.contains(target1_v3)); + assertTrue(repo.contains(target1_v4)); + assertTrue(repo.contains(target2_v1)); + assertTrue(repo.contains(target2_v2)); + + // Add yet another deployment version, which should cause the oldest (= version 2) of target1 to be purged... + DeploymentVersionObject target1_v5 = createBasicDeploymentVersionObject("target1", "5", new String[] { "artifact1", "artifact2" }); + + repo = m_deploymentVersionRepository.get(); + // Still 5 deployment versions, without versions 1 & 2 of target1... + assertEquals(repo.size(), 5); + assertFalse(repo.contains(target1_v1)); + assertFalse(repo.contains(target1_v2)); + assertTrue(repo.contains(target1_v3)); + assertTrue(repo.contains(target1_v4)); + assertTrue(repo.contains(target1_v5)); + assertTrue(repo.contains(target2_v1)); + assertTrue(repo.contains(target2_v2)); + } - Map props = new HashMap(); - props.put(Association.LEFT_ENDPOINT, "(" + BundleHelper.KEY_SYMBOLICNAME + "=a1)"); - props.put(Association.LEFT_CARDINALITY, "1"); - props.put(Association.RIGHT_ENDPOINT, "(" + FeatureObject.KEY_NAME + "=f*)"); - props.put(Association.RIGHT_CARDINALITY, "2"); + @Test(groups = { TestUtils.UNIT }) + public void testModelFiltering() throws InvalidSyntaxException { + initializeRepositoryAdmin(); + // Create an empty artifact repository. + Map attributes = new HashMap(); + attributes.put("myattribute", "theattribute"); + attributes.put("name", "attname"); Map tags = new HashMap(); + assert m_featureRepository != null : "Something has gone wrong injecting the feature repository."; + FeatureObject g1 = m_featureRepository.create(attributes, tags); + g1.addTag("mytag", "thetag"); + g1.addTag("name", "tagname"); + g1.addTag("difficult", ")diffi)c*ul\\t"); + + assert m_featureRepository.get(createLocalFilter("(myattribute=*)")).size() == 1 : "There should be a myattribute in b1."; + assert m_featureRepository.get(createLocalFilter("(myattribute=theattribute)")).size() == 1 : "There should be myattribute=theattribute in b1."; + assert m_featureRepository.get(createLocalFilter("(myattribute=thetag)")).size() == 0 : "There should not be myattribute=thetag in b1."; + assert m_featureRepository.get(createLocalFilter("(mytag=*)")).size() == 1 : "There should be a mytag in b1."; + assert m_featureRepository.get(createLocalFilter("(mytag=thetag)")).size() == 1 : "There should be mytag=thetag in b1."; + assert m_featureRepository.get(createLocalFilter("(mytag=theattribute)")).size() == 0 : "There should not be mytag=theattribute in b1."; + + assert m_featureRepository.get(createLocalFilter("(name=*)")).size() == 1 : "There should be a name parameter in b1."; + assert m_featureRepository.get(createLocalFilter("(name=attname)")).size() == 1 : "There should be a name=attname in b1."; + assert m_featureRepository.get(createLocalFilter("(name=tagname)")).size() == 1 : "There should be a name=tagname in b1."; + assert m_featureRepository.get(createLocalFilter("(name=thetag)")).size() == 0 : "There should not be name=thetag in b1."; + try { - m_artifact2FeatureRepository.create(props, tags); - assert false : "There are three matches for the feature, but we have a cardinality of 2; we should expect a NPE because no comparator is provided."; + m_featureRepository.get(createLocalFilter("(difficult=)diffi)c*ul\\t")); + assert false : "The non-escaped difficult string should raise an error."; } - catch (NullPointerException npe) { - //expected + catch (InvalidSyntaxException ex) { + // expected } + assert m_featureRepository.get(createLocalFilter("(difficult=" + RepositoryUtil.escapeFilterValue(")diffi)c*ul\\t") + ")")).size() == 1 : "The 'difficult' string should be correctly escaped, and thus return exactly one match."; + } - props.put(Association.RIGHT_CARDINALITY, "3"); + @Test(groups = { TestUtils.UNIT }) + public void testRepositorySerialization() throws IOException { + createBasicArtifactObject("myartifact", "1"); + createBasicArtifactObject("myartifact", "2"); - Artifact2FeatureAssociation bg = m_artifact2FeatureRepository.create(props, tags); - assert bg != null : "Assocating artifact to feature failed?!"; - - assert a1.getFeatures().size() == 3 : "The artifact should be associated to three features."; - assert (f1.getArtifacts().size() == 1) && f1.getArtifacts().contains(a1) : "g1 should be associated to only b1."; - assert (f2.getArtifacts().size() == 1) && f2.getArtifacts().contains(a1) : "g1 should be associated to only b1."; - assert (f3.getArtifacts().size() == 1) && f3.getArtifacts().contains(a1) : "g1 should be associated to only b1."; + // Write the store to a stream, reset the repository, and re-read it. + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + RepositorySet store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] { m_artifactRepository, m_artifact2FeatureRepository, m_featureRepository }, null, "", true); + new RepositorySerializer(store).toXML(buffer); + initializeRepositoryAdmin(); + store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] { m_artifactRepository, m_artifact2FeatureRepository, m_featureRepository }, null, "", true); + new RepositorySerializer(store).fromXML(new ByteArrayInputStream(buffer.toByteArray())); + + assert m_artifactRepository.get().size() == 2 : "We expect to find 2 artifacts, but we find " + m_artifactRepository.get().size(); } - private Filter createLocalFilter(String filter) throws InvalidSyntaxException { - return FrameworkUtil.createFilter(filter); + @Test(groups = { TestUtils.UNIT }) + public void testSerialization() throws IOException { + ArtifactObject b1 = createBasicArtifactObject("artifact1"); + ArtifactObject b2 = createBasicArtifactObject("artifact2"); + ArtifactObject b3 = createBasicArtifactObject("artifact3"); + + FeatureObject g1 = createBasicFeatureObject("feature1"); + FeatureObject g2 = createBasicFeatureObject("feature2"); + + m_artifact2FeatureRepository.create(b1, g1); + m_artifact2FeatureRepository.create(b2, g2); + m_artifact2FeatureRepository.create(b3, g2); + + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + RepositorySet store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] { m_artifactRepository, m_featureRepository, m_artifact2FeatureRepository }, null, "", true); + new RepositorySerializer(store).toXML(buffer); + initializeRepositoryAdmin(); + store = new RepositorySet(null, null, null, null, new ObjectRepositoryImpl[] { m_artifactRepository, m_featureRepository, m_artifact2FeatureRepository }, null, "", true); + new RepositorySerializer(store).fromXML(new ByteArrayInputStream(buffer.toByteArray())); + + assert m_artifactRepository.get().size() == 3 : "We expect to find 3 artifacts, but we find " + m_artifactRepository.get().size(); + assert m_featureRepository.get().size() == 2 : "We expect to find 2 features, but we find " + m_featureRepository.get().size(); + assert m_artifact2FeatureRepository.get().size() == 3 : "We expect to find 3 associations, but we find " + m_artifact2FeatureRepository.get().size(); + assert b1.isAssociated(g1, FeatureObject.class) : "After serialization, b1 should still be associated with g1."; + assert !b1.isAssociated(g2, FeatureObject.class) : "After serialization, b1 should not be associated with g1."; + assert !b2.isAssociated(g1, FeatureObject.class) : "After serialization, b2 should not be associated with g2."; + assert b2.isAssociated(g2, FeatureObject.class) : "After serialization, b2 should still be associated with g2."; + assert !b3.isAssociated(g1, FeatureObject.class) : "After serialization, b3 should not be associated with g2."; + assert b3.isAssociated(g2, FeatureObject.class) : "After serialization, b3 should still be associated with g2."; + } + + @Test(groups = { TestUtils.UNIT }) + public void testUnlimitedNumberOfDeploymentVersions() throws IOException { + RepositoryConfiguration repoConfig = new RepositoryConfigurationImpl(); + + m_deploymentVersionRepository = new DeploymentVersionRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_deploymentVersionRepository, BundleContext.class, m_mockBundleContext); + + DeploymentVersionObject target1_v1 = createBasicDeploymentVersionObject("target1", "1", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject target1_v2 = createBasicDeploymentVersionObject("target1", "2", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject target1_v3 = createBasicDeploymentVersionObject("target1", "3", new String[] { "artifact1", "artifact2" }); + DeploymentVersionObject target2_v1 = createBasicDeploymentVersionObject("target2", "1", new String[] { "artifact3", "artifact4" }); + DeploymentVersionObject target2_v2 = createBasicDeploymentVersionObject("target2", "2", new String[] { "artifact3", "artifact5" }); + + List repo = m_deploymentVersionRepository.get(); + assertEquals(repo.size(), 5); + assertTrue(repo.contains(target1_v1)); + assertTrue(repo.contains(target1_v2)); + assertTrue(repo.contains(target1_v3)); + assertTrue(repo.contains(target2_v1)); + assertTrue(repo.contains(target2_v2)); + + DeploymentVersionObject target1_v4 = createBasicDeploymentVersionObject("target1", "4", new String[] { "artifact1", "artifact2" }); + + repo = m_deploymentVersionRepository.get(); + assertEquals(repo.size(), 6); + assertTrue(repo.contains(target1_v1)); + assertTrue(repo.contains(target1_v2)); + assertTrue(repo.contains(target1_v3)); + assertTrue(repo.contains(target1_v4)); + assertTrue(repo.contains(target2_v1)); + assertTrue(repo.contains(target2_v2)); + + DeploymentVersionObject target1_v5 = createBasicDeploymentVersionObject("target1", "5", new String[] { "artifact1", "artifact2" }); + + repo = m_deploymentVersionRepository.get(); + assertEquals(repo.size(), 7); + assertTrue(repo.contains(target1_v1)); + assertTrue(repo.contains(target1_v2)); + assertTrue(repo.contains(target1_v3)); + assertTrue(repo.contains(target1_v4)); + assertTrue(repo.contains(target1_v5)); + assertTrue(repo.contains(target2_v1)); + assertTrue(repo.contains(target2_v2)); } private ArtifactObject createBasicArtifactObject(String symbolicName) { @@ -681,12 +725,17 @@ public class ModelTest { return m_artifactRepository.create(attr, tags); } - private FeatureObject createBasicFeatureObject(String name) { + private DeploymentVersionObject createBasicDeploymentVersionObject(String targetID, String version, String[] artifacts) { Map attr = new HashMap(); - attr.put(FeatureObject.KEY_NAME, name); + attr.put(DeploymentVersionObject.KEY_TARGETID, targetID); + attr.put(DeploymentVersionObject.KEY_VERSION, version); Map tags = new HashMap(); - return m_featureRepository.create(attr, tags); + List deploymentArtifacts = new ArrayList(); + for (String s : artifacts) { + deploymentArtifacts.add(new DeploymentArtifactImpl(s, -1L)); + } + return m_deploymentVersionRepository.create(attr, tags, deploymentArtifacts.toArray(new DeploymentArtifact[0])); } private DistributionObject createBasicDistributionObject(String name) { @@ -697,6 +746,14 @@ public class ModelTest { return m_distributionRepository.create(attr, tags); } + private FeatureObject createBasicFeatureObject(String name) { + Map attr = new HashMap(); + attr.put(FeatureObject.KEY_NAME, name); + Map tags = new HashMap(); + + return m_featureRepository.create(attr, tags); + } + private TargetObject createBasicTargetObject(String id) { Map attr = new HashMap(); attr.put(TargetObject.KEY_ID, id); @@ -705,16 +762,56 @@ public class ModelTest { return m_targetRepository.create(attr, tags); } - private DeploymentVersionObject createBasicDeploymentVersionObject(String targetID, String version, String[] artifacts) { - Map attr = new HashMap(); - attr.put(DeploymentVersionObject.KEY_TARGETID, targetID); - attr.put(DeploymentVersionObject.KEY_VERSION, version); - Map tags = new HashMap(); + private Filter createLocalFilter(String filter) throws InvalidSyntaxException { + return FrameworkUtil.createFilter(filter); + } - List deploymentArtifacts = new ArrayList(); - for (String s : artifacts) { - deploymentArtifacts.add(new DeploymentArtifactImpl(s, -1L)); - } - return m_deploymentVersionRepository.create(attr, tags, deploymentArtifacts.toArray(new DeploymentArtifact[0])); + @BeforeMethod(alwaysRun = true) + private void initializeRepositoryAdmin() { + m_mockBundleContext = TestUtils.createMockObjectAdapter(BundleContext.class, new Object() { + @SuppressWarnings("unused") + public Filter createFilter(String filter) throws InvalidSyntaxException { + return createLocalFilter(filter); + } + }); + + m_mockChangeNotifier = TestUtils.createNullObject(ChangeNotifier.class); + + RepositoryConfiguration repoConfig = new RepositoryConfigurationImpl(); + + m_artifactRepository = new ArtifactRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_artifactRepository, LogService.class); + TestUtils.configureObject(m_artifactRepository, BundleContext.class, m_mockBundleContext); + m_artifactRepository.addHelper(BundleHelper.MIMETYPE, m_bundleHelper); + m_featureRepository = new FeatureRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_featureRepository, BundleContext.class, m_mockBundleContext); + m_artifact2FeatureRepository = new Artifact2FeatureAssociationRepositoryImpl(m_artifactRepository, m_featureRepository, m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_artifact2FeatureRepository, BundleContext.class, m_mockBundleContext); + m_distributionRepository = new DistributionRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_distributionRepository, BundleContext.class, m_mockBundleContext); + m_feature2DistributionRepository = new Feature2DistributionAssociationRepositoryImpl(m_featureRepository, m_distributionRepository, m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_feature2DistributionRepository, BundleContext.class, m_mockBundleContext); + m_targetRepository = new TargetRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_targetRepository, BundleContext.class, m_mockBundleContext); + m_distribution2TargetRepository = new Distribution2TargetAssociationRepositoryImpl(m_distributionRepository, m_targetRepository, m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_distribution2TargetRepository, BundleContext.class, m_mockBundleContext); + m_deploymentVersionRepository = new DeploymentVersionRepositoryImpl(m_mockChangeNotifier, repoConfig); + TestUtils.configureObject(m_deploymentVersionRepository, BundleContext.class, m_mockBundleContext); + + m_repositoryAdmin = new RepositoryAdminImpl("testSessionID", repoConfig); + + Map, ObjectRepositoryImpl> repos = new HashMap, ObjectRepositoryImpl>(); + repos.put(ArtifactRepository.class, m_artifactRepository); + repos.put(Artifact2FeatureAssociationRepository.class, m_artifact2FeatureRepository); + repos.put(FeatureRepository.class, m_featureRepository); + repos.put(Feature2DistributionAssociationRepository.class, m_feature2DistributionRepository); + repos.put(DistributionRepository.class, m_distributionRepository); + repos.put(Distribution2TargetAssociationRepository.class, m_distribution2TargetRepository); + repos.put(TargetRepository.class, m_targetRepository); + repos.put(DeploymentVersionRepository.class, m_deploymentVersionRepository); + + m_repositoryAdmin.initialize(repos); + TestUtils.configureObject(m_repositoryAdmin, Preferences.class); + TestUtils.configureObject(m_repositoryAdmin, PreferencesService.class); } } Modified: ace/trunk/org.apache.ace.client.rest.itest/bnd.bnd URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.rest.itest/bnd.bnd?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.client.rest.itest/bnd.bnd (original) +++ ace/trunk/org.apache.ace.client.rest.itest/bnd.bnd Thu Oct 10 14:11:13 2013 @@ -1,5 +1,6 @@ Test-Cases: ${classes;CONCRETE;EXTENDS;org.apache.ace.it.IntegrationTestBase} --buildpath: osgi.core,\ +-buildpath: \ + osgi.core,\ osgi.cmpn,\ junit.osgi,\ biz.aQute.bnd,\ @@ -29,6 +30,8 @@ Test-Cases: ${classes;CONCRETE;EXTENDS;o -runfw: org.apache.felix.framework;version='[4,5)' -runvm: -ea -runbundles: osgi.cmpn,\ + com.sun.jersey.client,\ + com.sun.jersey.core,\ org.apache.felix.dependencymanager,\ org.apache.felix.configadmin,\ org.apache.felix.eventadmin,\ @@ -42,8 +45,6 @@ Test-Cases: ${classes;CONCRETE;EXTENDS;o org.apache.felix.gogo.command,\ org.apache.felix.gogo.runtime,\ org.apache.felix.gogo.shell,\ - com.sun.jersey.client,\ - com.sun.jersey.core,\ org.apache.ace.test;version=latest,\ org.apache.ace.http.listener;version=latest,\ org.apache.ace.authentication.api;version=latest,\ Modified: ace/trunk/org.apache.ace.client.rest.itest/src/org/apache/ace/client/rest/itest/RESTClientTest.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.rest.itest/src/org/apache/ace/client/rest/itest/RESTClientTest.java?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.client.rest.itest/src/org/apache/ace/client/rest/itest/RESTClientTest.java (original) +++ ace/trunk/org.apache.ace.client.rest.itest/src/org/apache/ace/client/rest/itest/RESTClientTest.java Thu Oct 10 14:11:13 2013 @@ -30,6 +30,7 @@ import org.apache.ace.client.repository. import org.apache.ace.client.repository.object.ArtifactObject; import org.apache.ace.http.listener.constants.HttpConstants; import org.apache.ace.it.IntegrationTestBase; +import org.apache.ace.test.constants.TestConstants; import org.apache.ace.test.utils.FileUtils; import org.apache.felix.dm.Component; import org.osgi.framework.Bundle; @@ -58,6 +59,7 @@ public class RESTClientTest extends Inte public static final String PROCESSOR = "org.osgi.deployment.rp.autoconf"; private static final String STOREPATH = "generated/store"; + private static final String HOST = "http://localhost:" + TestConstants.PORT; private static boolean m_hasBeenSetup = false; private static int m_testRunCount = 0; @@ -102,7 +104,7 @@ public class RESTClientTest extends Inte Client client = Client.create(); client.getProperties().put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, false); try { - WebResource r = client.resource("http://localhost:8080/client/work"); + WebResource r = client.resource(HOST.concat("/client/work")); try { r.post(String.class, ""); fail("We should have been redirected to a new workspace."); @@ -110,7 +112,7 @@ public class RESTClientTest extends Inte catch (UniformInterfaceException e) { ClientResponse response = e.getResponse(); URI location = response.getLocation(); - assertTrue(location.toString().startsWith("http://localhost:8080/client/work/rest-")); + assertTrue(location.toString().startsWith(HOST.concat("/client/work/rest-"))); WebResource r2 = client.resource(location); r2.get(String.class); r2.delete(); @@ -165,7 +167,7 @@ public class RESTClientTest extends Inte w2.post(); w2.delete(); } - WebResource t1versions = client.resource("http://localhost:8080/deployment/bar.t1/versions"); + WebResource t1versions = client.resource(HOST.concat("/deployment/bar.t1/versions")); assertEquals("1.0.0\n", t1versions.get(String.class)); } catch (Exception e) { @@ -229,7 +231,7 @@ public class RESTClientTest extends Inte w2.post(); w2.delete(); - WebResource t1versions = client.resource("http://localhost:8080/deployment/foo.t1/versions"); + WebResource t1versions = client.resource(HOST.concat("/deployment/foo.t1/versions")); assertEquals("1.0.0\n", t1versions.get(String.class)); } catch (Exception e) { @@ -288,7 +290,7 @@ public class RESTClientTest extends Inte assertResources(gson, w2, "target", 3); w2.delete(); - WebResource t1versions = client.resource("http://localhost:8080/deployment/t4/versions"); + WebResource t1versions = client.resource(HOST.concat("/deployment/t4/versions")); assertEquals("1.0.0\n", t1versions.get(String.class)); } catch (Exception e) { @@ -354,8 +356,12 @@ public class RESTClientTest extends Inte } private void configureServer() throws IOException { + configure("org.apache.ace.client.repository", + "obrlocation", HOST.concat("/obr/")); + configure("org.apache.ace.client.rest", "org.apache.ace.server.servlet.endpoint", "/client", + "repository.url", HOST.concat("/repository"), "authentication.enabled", "false"); configure("org.apache.ace.deployment.servlet", @@ -374,12 +380,12 @@ public class RESTClientTest extends Inte "fileLocation", STOREPATH); configure("org.apache.ace.deployment.provider.repositorybased", - "url", "http://localhost:8080/repository", + "url", HOST.concat("/repository"), "name", "deployment", "customer", "apache"); configure("org.apache.ace.discovery.property", - "serverURL", "http://localhost:8080"); + "serverURL", HOST); configure("org.apache.ace.identification.property", "targetID", "target-test"); @@ -418,7 +424,7 @@ public class RESTClientTest extends Inte "master", "true"); configure("org.apache.ace.configurator.useradmin.task.UpdateUserAdminTask", - "repositoryLocation", "http://localhost:8080/repository", + "repositoryLocation", HOST.concat("/repository"), "repositoryCustomer", "apache", "repositoryName", "user"); } @@ -497,7 +503,6 @@ public class RESTClientTest extends Inte } /** Create a user so we can log in to the server. */ - @SuppressWarnings("unchecked") private void createServerUser() { User user = (User) m_user.createRole("d", Role.USER); user.getProperties().put("username", "d"); @@ -551,7 +556,7 @@ public class RESTClientTest extends Inte /** Creates a new workspace. */ private WebResource createWorkspace(Client c) { - WebResource r = c.resource("http://localhost:8080/client/work"); + WebResource r = c.resource(HOST.concat("/client/work")); try { r.post(String.class, ""); fail("We should have been redirected to a new workspace."); Modified: ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/RESTClientServlet.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/RESTClientServlet.java?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/RESTClientServlet.java (original) +++ ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/RESTClientServlet.java Thu Oct 10 14:11:13 2013 @@ -34,18 +34,9 @@ import javax.servlet.http.HttpServletReq import javax.servlet.http.HttpServletResponse; import org.apache.ace.authentication.api.AuthenticationService; -import org.apache.ace.client.repository.RepositoryAdmin; import org.apache.ace.client.repository.RepositoryObject; import org.apache.ace.client.repository.SessionFactory; -import org.apache.ace.client.repository.repository.Artifact2FeatureAssociationRepository; -import org.apache.ace.client.repository.repository.ArtifactRepository; -import org.apache.ace.client.repository.repository.Distribution2TargetAssociationRepository; -import org.apache.ace.client.repository.repository.DistributionRepository; -import org.apache.ace.client.repository.repository.Feature2DistributionAssociationRepository; -import org.apache.ace.client.repository.repository.FeatureRepository; -import org.apache.ace.client.repository.repository.TargetRepository; import org.apache.ace.client.repository.stateful.StatefulTargetObject; -import org.apache.ace.client.repository.stateful.StatefulTargetRepository; import org.apache.ace.feedback.Event; import org.apache.felix.dm.Component; import org.apache.felix.dm.DependencyManager; @@ -74,8 +65,6 @@ public class RESTClientServlet extends H private static final String KEY_USE_AUTHENTICATION = "authentication.enabled"; /** URL of the repository to talk to. */ private static final String KEY_REPOSITORY_URL = "repository.url"; - /** URL of the OBR to talk to. */ - private static final String KEY_OBR_URL = "obr.url"; /** Name of the customer. */ private static final String KEY_CUSTOMER_NAME = "customer.name"; /** Name of the store repository. */ @@ -109,7 +98,6 @@ public class RESTClientServlet extends H private boolean m_useAuthentication; private String m_repositoryURL; - private String m_obrURL; private String m_customerName; private String m_storeRepositoryName; private String m_targetRepositoryName; @@ -170,7 +158,6 @@ public class RESTClientServlet extends H synchronized (m_workspaces) { m_useAuthentication = Boolean.valueOf(useAuth); m_repositoryURL = getProperty(properties, KEY_REPOSITORY_URL, "http://localhost:8080/repository"); - m_obrURL = getProperty(properties, KEY_OBR_URL, "http://localhost:8080/obr/"); m_customerName = getProperty(properties, KEY_CUSTOMER_NAME, "apache"); m_storeRepositoryName = getProperty(properties, KEY_STORE_REPOSITORY_NAME, "shop"); m_targetRepositoryName = getProperty(properties, KEY_DISTRIBUTION_REPOSITORY_NAME, "target"); @@ -463,7 +450,7 @@ public class RESTClientServlet extends H synchronized (m_workspaces) { sessionID = "rest-" + m_sessionID++; - workspace = new Workspace(sessionID, m_repositoryURL, m_obrURL, m_customerName, m_storeRepositoryName, m_targetRepositoryName, m_deploymentRepositoryName, m_serverUser); + workspace = new Workspace(sessionID, m_repositoryURL, m_customerName, m_storeRepositoryName, m_targetRepositoryName, m_deploymentRepositoryName); m_workspaces.put(sessionID, workspace); component = m_dm.createComponent().setImplementation(workspace); @@ -773,7 +760,7 @@ public class RESTClientServlet extends H synchronized (m_workspaces) { sessionID = "shell-" + m_sessionID++; - workspace = new Workspace(sessionID, m_repositoryURL, m_obrURL, storeCustomerName, m_storeRepositoryName, targetCustomerName, m_targetRepositoryName, deploymentCustomerName, m_deploymentRepositoryName, m_serverUser); + workspace = new Workspace(sessionID, m_repositoryURL, storeCustomerName, m_storeRepositoryName, targetCustomerName, m_targetRepositoryName, deploymentCustomerName, m_deploymentRepositoryName); m_workspaces.put(sessionID, workspace); component = m_dm.createComponent().setImplementation(workspace); Modified: ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/Workspace.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/Workspace.java?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/Workspace.java (original) +++ ace/trunk/org.apache.ace.client.rest/src/org/apache/ace/client/rest/Workspace.java Thu Oct 10 14:11:13 2013 @@ -66,14 +66,12 @@ public class Workspace { private final String m_sessionID; private final URL m_repositoryURL; - private final URL m_obrURL; private final String m_storeCustomerName; private final String m_distributionCustomerName; private final String m_deploymentCustomerName; private final String m_storeRepositoryName; private final String m_distributionRepositoryName; private final String m_deploymentRepositoryName; - private final String m_serverUser; private volatile BundleContext m_context; private volatile DependencyManager m_manager; @@ -87,21 +85,19 @@ public class Workspace { private volatile Distribution2TargetAssociationRepository m_distribution2TargetAssociationRepository; private volatile LogService m_log; - public Workspace(String sessionID, String repositoryURL, String obrURL, String customerName, String storeRepositoryName, String distributionRepositoryName, String deploymentRepositoryName, String serverUser) throws MalformedURLException { - this(sessionID, repositoryURL, obrURL, customerName, storeRepositoryName, customerName, distributionRepositoryName, customerName, deploymentRepositoryName, serverUser); + public Workspace(String sessionID, String repositoryURL, String customerName, String storeRepositoryName, String distributionRepositoryName, String deploymentRepositoryName) throws MalformedURLException { + this(sessionID, repositoryURL, customerName, storeRepositoryName, customerName, distributionRepositoryName, customerName, deploymentRepositoryName); } - public Workspace(String sessionID, String repositoryURL, String obrURL, String storeCustomerName, String storeRepositoryName, String distributionCustomerName, String distributionRepositoryName, String deploymentCustomerName, String deploymentRepositoryName, String serverUser) throws MalformedURLException { + public Workspace(String sessionID, String repositoryURL, String storeCustomerName, String storeRepositoryName, String distributionCustomerName, String distributionRepositoryName, String deploymentCustomerName, String deploymentRepositoryName) throws MalformedURLException { m_sessionID = sessionID; m_repositoryURL = new URL(repositoryURL); - m_obrURL = new URL(obrURL); m_storeCustomerName = storeCustomerName; m_distributionCustomerName = deploymentCustomerName; m_deploymentCustomerName = deploymentCustomerName; m_storeRepositoryName = storeRepositoryName; m_distributionRepositoryName = distributionRepositoryName; m_deploymentRepositoryName = deploymentRepositoryName; - m_serverUser = serverUser; } /** @@ -149,8 +145,8 @@ public class Workspace { public boolean login(User user) { try { RepositoryAdminLoginContext context = m_repositoryAdmin.createLoginContext(user); - - context.setObrBase(m_obrURL) + + context .add(context.createShopRepositoryContext() .setLocation(m_repositoryURL) .setCustomer(m_storeCustomerName) @@ -202,15 +198,16 @@ public class Workspace { } public List getRepositoryObjects(String entityType) { - List list = getObjectRepository(entityType).get(); + List list = getObjectRepository(entityType).get(); if (list != null) { return list; } else { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } } + @SuppressWarnings("unchecked") public RepositoryObject addRepositoryObject(String entityType, Map attributes, Map tags) throws IllegalArgumentException { if (TARGET.equals(entityType)) { return ((StatefulTargetRepository) getObjectRepository(TARGET)).preregister(attributes, tags); @@ -353,8 +350,8 @@ public class Workspace { } } - private Map getAttributes(RepositoryObject object) { - Map result = new HashMap(); + private Map getAttributes(RepositoryObject object) { + Map result = new HashMap(); for (Enumeration keys = object.getAttributeKeys(); keys.hasMoreElements();) { String key = keys.nextElement(); result.put(key, object.getAttribute(key)); @@ -396,6 +393,7 @@ public class Workspace { return null; } + @SuppressWarnings("unchecked") public void deleteRepositoryObject(String entityType, String entityId) { ObjectRepository objectRepository = getObjectRepository(entityType); RepositoryObject repositoryObject = objectRepository.get(entityId); Modified: ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/ConnectionFactoryImplTest.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/ConnectionFactoryImplTest.java?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/ConnectionFactoryImplTest.java (original) +++ ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/ConnectionFactoryImplTest.java Thu Oct 10 14:11:13 2013 @@ -26,6 +26,7 @@ import java.net.URL; import java.net.URLConnection; import java.util.Properties; +import org.apache.ace.test.constants.TestConstants; import org.testng.annotations.Test; /** @@ -37,7 +38,7 @@ public class ConnectionFactoryImplTest { static { try { - TEST_URL = new URL("http://localhost:8080/"); + TEST_URL = new URL("http://localhost:" + TestConstants.PORT + "/"); } catch (MalformedURLException e) { throw new RuntimeException(e); Modified: ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/UrlCredentialsFactoryTest.java URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/UrlCredentialsFactoryTest.java?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/UrlCredentialsFactoryTest.java (original) +++ ace/trunk/org.apache.ace.connectionfactory/test/org/apache/ace/connectionfactory/impl/UrlCredentialsFactoryTest.java Thu Oct 10 14:11:13 2013 @@ -30,6 +30,8 @@ import org.testng.annotations.Test; * Test cases for {@link UrlCredentialsFactory}. */ public class UrlCredentialsFactoryTest { + /** any valid URL will do, no actual connections will be opened to this URL. */ + private static final String AUTH_BASE_URL = "http://localhost/"; /** * Test method for {@link org.apache.ace.connectionfactory.impl.UrlCredentialsFactory#getCredentials(java.util.Dictionary)}. @@ -37,7 +39,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = MissingValueException.class) public void testGetCredentialsWithDictionaryBasicTypeMissingPasswordFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "basic"); props.put(UrlCredentialsFactory.KEY_AUTH_USER_NAME, "bar"); @@ -50,7 +52,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = MissingValueException.class) public void testGetCredentialsWithDictionaryClientCertTypeMissingKeystorePasswordFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "client_cert"); props.put(UrlCredentialsFactory.KEY_AUTH_TRUSTSTORE_FILE, "bar"); props.put(UrlCredentialsFactory.KEY_AUTH_TRUSTSTORE_PASS, "qux"); @@ -65,7 +67,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = MissingValueException.class) public void testGetCredentialsWithDictionaryClientCertTypeMissingKeystoreFileFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "client_cert"); props.put(UrlCredentialsFactory.KEY_AUTH_TRUSTSTORE_FILE, "bar"); props.put(UrlCredentialsFactory.KEY_AUTH_TRUSTSTORE_PASS, "qux"); @@ -80,7 +82,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }) public void testGetCredentialsWithDictionaryClientCertTypeOk() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "client_cert"); props.put(UrlCredentialsFactory.KEY_AUTH_TRUSTSTORE_FILE, "foo"); props.put(UrlCredentialsFactory.KEY_AUTH_TRUSTSTORE_PASS, "bar"); @@ -101,7 +103,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = MissingValueException.class) public void testGetCredentialsWithDictionaryClientCertTypeMissingTruststorePasswordFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "client_cert"); props.put(UrlCredentialsFactory.KEY_AUTH_KEYSTORE_FILE, "bar"); props.put(UrlCredentialsFactory.KEY_AUTH_KEYSTORE_PASS, "qux"); @@ -116,7 +118,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = MissingValueException.class) public void testGetCredentialsWithDictionaryClientCertTypeMissingTruststoreFileFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "client_cert"); props.put(UrlCredentialsFactory.KEY_AUTH_KEYSTORE_FILE, "bar"); props.put(UrlCredentialsFactory.KEY_AUTH_KEYSTORE_PASS, "qux"); @@ -131,7 +133,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = MissingValueException.class) public void testGetCredentialsWithDictionaryBasicTypeMissingUserNameFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "basic"); props.put(UrlCredentialsFactory.KEY_AUTH_USER_PASSWORD, "bar"); @@ -144,7 +146,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }) public void testGetCredentialsWithDictionaryBasicTypeOk() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "basic"); props.put(UrlCredentialsFactory.KEY_AUTH_USER_NAME, "foo"); props.put(UrlCredentialsFactory.KEY_AUTH_USER_PASSWORD, "bar"); @@ -158,7 +160,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }, expectedExceptions = IllegalArgumentException.class) public void testGetCredentialsWithDictionaryInvalidAuthTypeFail() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "nonsense"); UrlCredentialsFactory.getCredentials(props); @@ -197,7 +199,7 @@ public class UrlCredentialsFactoryTest { @Test(groups = { UNIT }) public void testGetCredentialsWithValidDictionaryOk() { Properties props = new Properties(); - props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, "http://localhost:8080/"); + props.put(UrlCredentialsFactory.KEY_AUTH_BASE_URL, AUTH_BASE_URL); props.put(UrlCredentialsFactory.KEY_AUTH_TYPE, "none"); UrlCredentialsFactory.getCredentials(props); Modified: ace/trunk/org.apache.ace.deployment.rp.autoconf.itest/bnd.bnd URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.deployment.rp.autoconf.itest/bnd.bnd?rev=1530984&r1=1530983&r2=1530984&view=diff ============================================================================== --- ace/trunk/org.apache.ace.deployment.rp.autoconf.itest/bnd.bnd (original) +++ ace/trunk/org.apache.ace.deployment.rp.autoconf.itest/bnd.bnd Thu Oct 10 14:11:13 2013 @@ -1,16 +1,15 @@ Test-Cases: ${classes;CONCRETE;EXTENDS;junit.framework.TestCase} --runbundles: org.mockito.mockito-all,\ - org.apache.ace.deployment.rp.autoconf;version=latest,\ - org.apache.ace.log.api;version=latest,\ - org.apache.ace.managementagent;version=latest,\ - org.apache.ace.test;version=latest,\ +-runbundles: \ + org.mockito.mockito-all,\ org.apache.felix.metatype,\ org.apache.felix.dependencymanager,\ - org.apache.felix.gogo.command,\ - org.apache.felix.gogo.runtime,\ - org.apache.felix.gogo.shell,\ + org.apache.felix.log,\ org.apache.felix.configadmin,\ - org.apache.felix.eventadmin + org.apache.felix.eventadmin,\ + org.apache.ace.test;version=latest,\ + org.apache.ace.deployment.rp.autoconf;version=latest,\ + org.apache.ace.log.api;version=latest,\ + org.apache.ace.managementagent;version=latest -runee: JavaSE-1.6 -runvm: -ea -runfw: org.apache.felix.framework