Partial rebind - test that version has successfully changed
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/07aaa899 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/07aaa899 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/07aaa899 Branch: refs/heads/master Commit: 07aaa8994237c2ef260d1996660b94fd04064b71 Parents: be6fd97 Author: Alex Heneveld <alex.henev...@cloudsoftcorp.com> Authored: Thu Feb 5 18:28:29 2015 +0000 Committer: Alex Heneveld <alex.henev...@cloudsoftcorp.com> Committed: Fri Feb 6 22:12:13 2015 +0000 ---------------------------------------------------------------------- .../rebind/ActivePartialRebindIteration.java | 21 +++-- .../rebind/InitialFullRebindIteration.java | 9 +-- .../brooklyn/entity/rebind/RebindIteration.java | 9 ++- .../entity/rebind/RebindManagerImpl.java | 15 +++- .../brooklyn/management/ha/OsgiManager.java | 4 +- .../entity/rebind/ActivePartialRebindTest.java | 8 +- .../rebind/ActivePartialRebindVersionTest.java | 84 ++++++++++++++++++++ .../brooklyn/entity/rebind/RebindTestUtils.java | 8 +- .../osgi/OsgiVersionMoreEntityTest.java | 40 ++++++++-- 9 files changed, 160 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java index fdcc810..56c467f 100644 --- a/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java +++ b/core/src/main/java/brooklyn/entity/rebind/ActivePartialRebindIteration.java @@ -74,7 +74,8 @@ public class ActivePartialRebindIteration extends RebindIteration { } public void applyTransformer(CompoundTransformer transformer) { - transformers.add(transformer); + if (transformer!=null) + transformers.add(transformer); } @Override @@ -88,10 +89,7 @@ public class ActivePartialRebindIteration extends RebindIteration { Builder mementoRawBuilder = BrooklynMementoRawData.builder(); /* - * TODO detail... - * This unmanages and re-manages. Not sure if that's ideal. - * Probably we should try to pause it, or switch to a model - * where each entity can be managed by any node. + * Unmanagement is done as part of the "manage" call, entity by entity. */ objectsToRebindFinal = MutableSet.of(); @@ -107,7 +105,6 @@ public class ActivePartialRebindIteration extends RebindIteration { } } - // TODO unmanage? pause? // get serialization for (BrooklynObject bo: objectsToRebindFinal) { Memento m = ((BrooklynObjectInternal)bo).getRebindSupport().getMemento(); @@ -115,13 +112,10 @@ public class ActivePartialRebindIteration extends RebindIteration { String mr = ((BrooklynMementoPersisterToObjectStore)p).getMementoSerializer().toString(m); mementoRawBuilder.put(BrooklynObjectType.of(bo), bo.getId(), mr); } - // then rebuild mementoRawData = mementoRawBuilder.build(); - // TODO see comment in InitialFullRebindIteration - mementoManifest = persistenceStoreAccess.loadMementoManifest(mementoRawData, exceptionHandler); - determineStateFromManifestFiles(); + preprocessManifestFiles(); // skip this phase, as catalog is not being changed // (and we don't want to unload things) @@ -138,8 +132,11 @@ public class ActivePartialRebindIteration extends RebindIteration { } @Override - protected void determineStateFromManifestFiles() { - super.determineStateFromManifestFiles(); + protected void preprocessManifestFiles() throws Exception { + for (CompoundTransformer transformer: transformers) { + mementoRawData = transformer.transform(mementoRawData); + } + super.preprocessManifestFiles(); overwritingMaster = true; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java index b045873..9906f30 100644 --- a/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java +++ b/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java @@ -78,15 +78,10 @@ public class InitialFullRebindIteration extends RebindIteration { protected void loadManifestFiles() throws Exception { checkEnteringPhase(1); - Preconditions.checkState(mementoRawData==null && mementoManifest==null, "Memento data should not yet be set when calling this"); - + Preconditions.checkState(mementoRawData==null, "Memento raw data should not yet be set when calling this"); mementoRawData = persistenceStoreAccess.loadMementoRawData(exceptionHandler); - // TODO building the manifests should be part of this class (or parent) - // it does not have anything to do with the persistence store! - mementoManifest = persistenceStoreAccess.loadMementoManifest(mementoRawData, exceptionHandler); - - determineStateFromManifestFiles(); + preprocessManifestFiles(); if (mode!=ManagementNodeState.HOT_STANDBY && mode!=ManagementNodeState.HOT_BACKUP) { if (!isEmpty) { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java index fd4fded..3582030 100644 --- a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java +++ b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java @@ -278,9 +278,16 @@ public abstract class RebindIteration { throw new IllegalStateException("Phase mismatch: should be phase "+targetPhase+" but is currently "+phase); } - protected void determineStateFromManifestFiles() { + protected void preprocessManifestFiles() throws Exception { checkContinuingPhase(1); + Preconditions.checkState(mementoRawData!=null, "Memento raw data should be set when calling this"); + Preconditions.checkState(mementoManifest==null, "Memento data should not yet be set when calling this"); + + // TODO building the manifests should be part of this class (or parent) + // it does not have anything to do with the persistence store! + mementoManifest = persistenceStoreAccess.loadMementoManifest(mementoRawData, exceptionHandler); + overwritingMaster = false; isEmpty = mementoManifest.isEmpty(); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java index 9e30f7e..e6f4aea 100644 --- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java +++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java @@ -20,6 +20,7 @@ package brooklyn.entity.rebind; import static com.google.common.base.Preconditions.checkNotNull; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; @@ -43,6 +44,7 @@ import brooklyn.entity.rebind.persister.BrooklynMementoPersisterToObjectStore; import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils; import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils.CreateBackupMode; import brooklyn.entity.rebind.persister.PersistenceActivityMetrics; +import brooklyn.entity.rebind.transformer.CompoundTransformer; import brooklyn.internal.BrooklynFeatureEnablement; import brooklyn.management.ExecutionContext; import brooklyn.management.Task; @@ -362,7 +364,8 @@ public class RebindManagerImpl implements RebindManager { if (persistenceStoreAccess != null) persistenceStoreAccess.stop(true); } - public void testRebindNodeXXX(String ...objectsToRebindIds) { + + public void rebindPartialActive(CompoundTransformer transformer, Iterator<BrooklynObject> objectsToRebind) { final ClassLoader classLoader = managementContext.getCatalog().getRootClassLoader(); final RebindExceptionHandler exceptionHandler = @@ -378,15 +381,19 @@ public class RebindManagerImpl implements RebindManager { ActivePartialRebindIteration iteration = new ActivePartialRebindIteration(this, mode, classLoader, exceptionHandler, rebindActive, readOnlyRebindCount, rebindMetrics, persistenceStoreAccess); + iteration.setObjectIterator(objectsToRebind); + iteration.applyTransformer(transformer); + iteration.run(); + } + + public void rebindPartialActive(CompoundTransformer transformer, String ...objectsToRebindIds) { List<BrooklynObject> objectsToRebind = MutableList.of(); for (String objectId: objectsToRebindIds) { BrooklynObject obj = managementContext.lookup(objectId); if (obj instanceof Entity) obj = Entities.deproxy((Entity)obj); objectsToRebind.add(obj); } - - iteration.setObjectIterator(objectsToRebind.iterator()); - iteration.run(); + rebindPartialActive(transformer, objectsToRebind.iterator()); } protected ManagementNodeState getRebindMode() { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/main/java/brooklyn/management/ha/OsgiManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/management/ha/OsgiManager.java b/core/src/main/java/brooklyn/management/ha/OsgiManager.java index a3cbba2..260f5ff 100644 --- a/core/src/main/java/brooklyn/management/ha/OsgiManager.java +++ b/core/src/main/java/brooklyn/management/ha/OsgiManager.java @@ -32,6 +32,7 @@ import org.osgi.framework.launch.Framework; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import brooklyn.BrooklynVersion; import brooklyn.catalog.CatalogItem.CatalogBundle; import brooklyn.config.BrooklynServerConfig; import brooklyn.config.BrooklynServerPaths; @@ -215,7 +216,8 @@ public class OsgiManager { Throwable cause = e.getCause(); if (cause != null && cause.getMessage().contains("Unresolved constraint in bundle")) { - log.warn("Unresolved constraint resolving OSGi bundle "+catalogBundle+" to load "+type+": "+cause.getMessage()); + log.warn("Unresolved constraint resolving OSGi bundle "+catalogBundle+" to load "+type+": "+cause.getMessage()+ + (BrooklynVersion.isDevelopmentEnvironment() ? " (may be due to IDE / dev env; try a maven build)" : "")); if (log.isDebugEnabled()) log.debug("Trace for OSGi resolution failure", e); } } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java index 52cd3b1..80e13b6 100644 --- a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java +++ b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindTest.java @@ -35,9 +35,9 @@ public class ActivePartialRebindTest extends RebindTestFixtureWithApp { private static final Logger log = LoggerFactory.getLogger(ActivePartialRebindTest.class); - protected void doPartialRebindByObjectById(String ...ids) { + protected void doPartialRebindOfIds(String ...objectsToRebindIds) { RebindManagerImpl rm = (RebindManagerImpl) origManagementContext.getRebindManager(); - rm.testRebindNodeXXX(ids); + rm.rebindPartialActive(null, objectsToRebindIds); } @Test @@ -46,7 +46,7 @@ public class ActivePartialRebindTest extends RebindTestFixtureWithApp { Entities.manage(c1); AbstractEntity c1r = Entities.deproxy(c1); - doPartialRebindByObjectById(c1.getId()); + doPartialRebindOfIds(c1.getId()); BrooklynObject c2 = origManagementContext.lookup(c1.getId()); AbstractEntity c2r = Entities.deproxy((Entity)c2); @@ -64,7 +64,7 @@ public class ActivePartialRebindTest extends RebindTestFixtureWithApp { gcAndLog("before"); long used0 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); for (int i=0; i<500; i++) { - doPartialRebindByObjectById(c1.getId()); + doPartialRebindOfIds(c1.getId()); origManagementContext.getGarbageCollector().gcIteration(); gcAndLog("iteration "+i); if (i==5) used0 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java new file mode 100644 index 0000000..46c1bb6 --- /dev/null +++ b/core/src/test/java/brooklyn/entity/rebind/ActivePartialRebindVersionTest.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package brooklyn.entity.rebind; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.Assert; +import org.testng.annotations.Test; + +import brooklyn.catalog.CatalogItem; +import brooklyn.entity.Entity; +import brooklyn.entity.rebind.transformer.CompoundTransformer; +import brooklyn.management.internal.LocalManagementContext; +import brooklyn.management.osgi.OsgiTestResources; +import brooklyn.management.osgi.OsgiVersionMoreEntityTest; + +public class ActivePartialRebindVersionTest extends RebindTestFixtureWithApp { + + @SuppressWarnings("unused") + private static final Logger log = LoggerFactory.getLogger(ActivePartialRebindVersionTest.class); + + protected LocalManagementContext createOrigManagementContext() { + return RebindTestUtils.managementContextBuilder(mementoDir, classLoader) + .persistPeriodMillis(getPersistPeriodMillis()) + .forLive(useLiveManagementContext()) + .emptyCatalog(useEmptyCatalog()) + .enableOsgi(true) + .buildStarted(); + } + + protected void doPartialRebindByObjectById(CompoundTransformer transformer, String ...objectsToRebindIds) { + RebindManagerImpl rm = (RebindManagerImpl) origManagementContext.getRebindManager(); + rm.rebindPartialActive(transformer, objectsToRebindIds); + } + + @Test + public void testSwitchingVersions() throws Exception { + CatalogItem<?, ?> catV1 = OsgiVersionMoreEntityTest.addMoreEntityV1(origManagementContext, "1.0"); + Entity childV1 = OsgiVersionMoreEntityTest.addItemFromCatalog(origManagementContext, origApp, catV1); + + // v1 says Hi Brooklyn + // v2 says HI Brooklyn + + Assert.assertEquals(OsgiVersionMoreEntityTest.doEffectorCallBrooklyn(childV1), "Hi BROOKLYN"); + + // simply adding to catalog doesn't change + CatalogItem<?, ?> catV2 = OsgiVersionMoreEntityTest.addMoreEntityV2(origManagementContext, "1.1"); + Assert.assertEquals(OsgiVersionMoreEntityTest.doEffectorCallBrooklyn(childV1), "Hi BROOKLYN"); + Entity child2V2 = OsgiVersionMoreEntityTest.addItemFromCatalog(origManagementContext, origApp, catV2); + Assert.assertEquals(OsgiVersionMoreEntityTest.doEffectorCallBrooklyn(child2V2), "HI BROOKLYN"); + + // now transform, with a version change + CompoundTransformer transformer = CompoundTransformer.builder().changeCatalogItemId( + OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, "1.0", + OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, "1.1").build(); + doPartialRebindByObjectById(transformer, childV1.getId()); + + Entity childV2 = origManagementContext.lookup(childV1.getId(), Entity.class); + Assert.assertEquals(OsgiVersionMoreEntityTest.doEffectorCallBrooklyn(childV2), "HI BROOKLYN"); + + // _v1_ child also points to new implementation -- saying HI + Assert.assertEquals(OsgiVersionMoreEntityTest.doEffectorCallBrooklyn(childV1), "HI BROOKLYN"); + + // in fact they are the same + Assert.assertTrue(childV1==childV2, "Expected same instance: "+childV1+" / "+childV2); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/test/java/brooklyn/entity/rebind/RebindTestUtils.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindTestUtils.java b/core/src/test/java/brooklyn/entity/rebind/RebindTestUtils.java index daafe58..ea901af 100644 --- a/core/src/test/java/brooklyn/entity/rebind/RebindTestUtils.java +++ b/core/src/test/java/brooklyn/entity/rebind/RebindTestUtils.java @@ -145,6 +145,7 @@ public class RebindTestUtils { PersistenceObjectStore objectStore; Duration persistPeriod = Duration.millis(100); boolean forLive; + boolean enableOsgi = false; boolean emptyCatalog; ManagementContextBuilder(File mementoDir, ClassLoader classLoader) { @@ -178,6 +179,11 @@ public class RebindTestUtils { return this; } + public ManagementContextBuilder enableOsgi(boolean val) { + this.enableOsgi = val; + return this; + } + public ManagementContextBuilder emptyCatalog() { this.emptyCatalog = true; return this; @@ -199,7 +205,7 @@ public class RebindTestUtils { if (forLive) { unstarted = new LocalManagementContext(properties); } else { - unstarted = new LocalManagementContextForTests(properties); + unstarted = LocalManagementContextForTests.builder(true).useProperties(properties).disableOsgi(!enableOsgi).build(); } objectStore.injectManagementContext(unstarted); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/07aaa899/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java b/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java index e8d9860..b4a3511 100644 --- a/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java +++ b/core/src/test/java/brooklyn/management/osgi/OsgiVersionMoreEntityTest.java @@ -24,7 +24,6 @@ import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; -import brooklyn.test.TestResourceUnavailableException; import org.osgi.framework.Bundle; import org.osgi.framework.BundleException; import org.osgi.framework.launch.Framework; @@ -44,16 +43,19 @@ import brooklyn.entity.effector.Effectors; import brooklyn.entity.proxying.EntitySpec; import brooklyn.entity.proxying.InternalEntityFactory; import brooklyn.entity.proxying.InternalPolicyFactory; +import brooklyn.management.ManagementContext; import brooklyn.management.classloading.BrooklynClassLoadingContext; import brooklyn.management.internal.LocalManagementContext; import brooklyn.management.internal.ManagementContextInternal; import brooklyn.policy.PolicySpec; +import brooklyn.test.TestResourceUnavailableException; import brooklyn.test.entity.LocalManagementContextForTests; import brooklyn.test.entity.TestApplication; import brooklyn.util.guava.Maybe; import brooklyn.util.os.Os; import brooklyn.util.osgi.Osgis; +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; @@ -128,8 +130,12 @@ public class OsgiVersionMoreEntityTest { protected CatalogItem<?, ?> addCatalogItemWithTypeAsName(String type, String version, String ...libraries) { return addCatalogItemWithNameAndType(type, version, type, libraries); } - @SuppressWarnings("deprecation") protected CatalogItem<?, ?> addCatalogItemWithNameAndType(String symName, String version, String type, String ...libraries) { + return addCatalogItemWithNameAndType(mgmt, symName, version, type, libraries); + } + + @SuppressWarnings("deprecation") + static CatalogItem<?, ?> addCatalogItemWithNameAndType(ManagementContext mgmt, String symName, String version, String type, String ...libraries) { CatalogEntityItemDto c1 = newCatalogItemWithNameAndType(symName, version, type, libraries); mgmt.getCatalog().addItem(c1); CatalogItem<?, ?> c2 = mgmt.getCatalog().getCatalogItem(type, version); @@ -148,15 +154,20 @@ public class OsgiVersionMoreEntityTest { return c1; } - @SuppressWarnings({ "unchecked", "rawtypes" }) protected Entity addItemFromCatalog(CatalogItem<?, ?> c2) { + return addItemFromCatalog(mgmt, app, c2); + } + + @Beta + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static Entity addItemFromCatalog(ManagementContext mgmt, TestApplication parent, CatalogItem<?, ?> c2) { BrooklynClassLoadingContext loader = CatalogUtils.newClassLoadingContext(mgmt, c2); EntitySpec spec = EntitySpec.create( (Class)loader.loadClass(c2.getJavaType()) ); // not a great test as we set the ID here; but: // YAML test will do better; // and we can check that downstream items are loaded correctly spec.catalogItemId(c2.getId()); - Entity me = app.createAndManageChild(spec); + Entity me = parent.createAndManageChild(spec); return me; } @@ -188,14 +199,27 @@ public class OsgiVersionMoreEntityTest { return me.invoke(Effectors.effector(String.class, "sayHI").buildAbstract(), ImmutableMap.of("name", "brooklyn")).getUnchecked(); } + public static CatalogItem<?, ?> addMoreEntityV1(ManagementContext mgmt, String versionToRegister) { + return addCatalogItemWithNameAndType(mgmt, + OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, + versionToRegister, + OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, + BROOKLYN_TEST_MORE_ENTITIES_V1_URL); + } + public static CatalogItem<?, ?> addMoreEntityV2(ManagementContext mgmt, String versionToRegister) { + return addCatalogItemWithNameAndType(mgmt, + OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, + versionToRegister, + OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, + BROOKLYN_TEST_MORE_ENTITIES_V2_URL, + BROOKLYN_TEST_OSGI_ENTITIES_URL); + } + @Test public void testMoreEntitiesV1() throws Exception { TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), BROOKLYN_TEST_MORE_ENTITIES_V1_PATH); - CatalogItem<?, ?> c2 = addCatalogItemWithTypeAsName( - OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY, - TEST_VERSION, - BROOKLYN_TEST_MORE_ENTITIES_V1_URL); + CatalogItem<?, ?> c2 = addMoreEntityV1(mgmt, TEST_VERSION); // test load and instantiate Entity me = addItemFromCatalog(c2);