registerPlugin("update2-v1_0.xml");
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
ResourceType platform1 = getResourceType("myPlatform");
Resource platformResource = createResource("foo-myPlatform", "foo-myPlatform", platform1);
resourceManager.createResource(overlord, platformResource, -1);
ResourceType service1 = getResourceType("service1");
Resource service1Resource = createResource("foo-service1", "foo-service1", service1);
platformResource.addChildResource(service1Resource);
resourceManager.createResource(overlord, service1Resource, -1);
ResourceType nestedOne = getResourceType("nestedOne");
Resource nestedOneResource = createResource("foo-nestedOne", "foo-nestedOne", nestedOne);
service1Resource.addChildResource(nestedOneResource);
resourceManager.createResource(overlord, nestedOneResource, -1);
getTransactionManager().begin();
platform1 = em.find(ResourceType.class, platform1.getId());
assert platform1 != null : "I did not find myPlatform";
Set<MeasurementDefinition> defs = platform1.getMetricDefinitions();
// no built-in AvailabilityType metric for platforms
assert defs.size() == 1 : "I was expecting 1 metric definition at platform level in v1";
assert DisplayType.DETAIL == defs.iterator().next().getDisplayType() : "Display type should be DETAIL in v1";
// one child service in v1
Set<ResourceType> platformChildren = platform1.getChildResourceTypes();
assert platformChildren.size() == 1 : "Expected 1 direct child service of platform in v1";
service1 = platformChildren.iterator().next();
assert service1.getName().equals("service1") : "Expected 'service1' as name of direct platform child in v1";
// include the built-in AvailabilityType metric
assert service1.getMetricDefinitions().size() == 2 : "Expected 2 metric for 'service1' in v1";
Set<ResourceType> nestedServices = service1.getChildResourceTypes();
assert nestedServices.size() == 1 : "Expected 1 nested service of 'service1' in v1";
Set<MeasurementDefinition> nestedDefs = nestedServices.iterator().next().getMetricDefinitions();
// include the built-in AvailabilityType metric
assert nestedDefs.size() == 2 : "Expected 2 definition within 'nestedService' in v1";
MeasurementDefinition defThree = nestedDefs.iterator().next();
int definitionId = defThree.getId(); // get the id of the definition "Three" and save it for later use
getTransactionManager().rollback();
System.out.println("testMoveResourceType -- done with the first plugin version");
/*
* The nested service got pulled out and put under platform
*/
registerPlugin("update2-v2_0.xml");
ResourceType platform2 = getResourceType("myPlatform");
getTransactionManager().begin();
platform2 = em.find(ResourceType.class, platform2.getId());
assert platform2 != null : "I did not find myPlatform";
Set<MeasurementDefinition> defs2 = platform2.getMetricDefinitions();
// no built-in AvailabilityType metric for platforms
assert defs2.size() == 1 : "I was expecting 1 definition at platform level in v2";
assert DisplayType.SUMMARY == defs2.iterator().next().getDisplayType() : "Display type should be SUMMARY in v2";
ResourceCriteria resourceCriteria = new ResourceCriteria();
resourceCriteria.setStrict(true);
resourceCriteria.addFilterResourceKey("foo-myPlatform");
resourceCriteria.fetchChildResources(true);
Resource platform2Resource = getResource(resourceCriteria);
assert platform2Resource != null : "Expected to find platform Resource in db.";
// two children in v2
Set<ResourceType> platformChildren2 = platform2.getChildResourceTypes();
assert platformChildren2.size() == 2 : "Expected 2 direct child service types of platform in v2";
Set<Resource> platform2ChildResources = platform2Resource.getChildResources();
assert platform2ChildResources.size() == 2 : "Expected 2 direct child services of platform in v2";
boolean foundMovedResource = false;
for (Resource childResource : platform2ChildResources) {
assert childResource.getChildResources().isEmpty() : "Expected child Resource " + childResource
+ " to have no children";