/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.server.resource.metadata.test;
import java.util.Set;
import javax.transaction.Status;
import org.testng.annotations.Test;
import org.rhq.core.domain.resource.ProcessScan;
import org.rhq.core.domain.resource.ResourceType;
/**
* Note, plugins are registered in new transactions. for tests, this means
* you can't do everything in a trans and roll back at the end. You must clean up manually.
*/
public class UpdateNativesSubsystemTest extends UpdatePluginMetadataTestBase {
@Override
protected String getSubsystemDirectory() {
return "natives";
}
/**
* Tests the behaviour of the MetadataManager wrt <process-scan> entries.
*
* @throws Exception
*/
@Test
public void testProcessScans() throws Exception {
try {
registerPlugin("update5-v1_0.xml");
ResourceType platform1 = getResourceType("myPlatform5");
getTransactionManager().begin();
platform1 = em.find(ResourceType.class, platform1.getId());
Set<ResourceType> servers = platform1.getChildResourceTypes();
assert servers.size() == 1 : "Expected to find 1 server in v1, but got " + servers.size();
ResourceType server1 = servers.iterator().next();
/*
* TODO check process scans as well
*/
Set<ProcessScan> scans1 = server1.getProcessScans();
assert scans1.size() == 3 : "Expected to find 3 process scans in v1, but got " + scans1.size();
int found = 0;
for (ProcessScan ps : scans1) {
if (containedIn(ps.getName(), new String[] { "JBoss4", "JBoss5", "JBoss6" })) {
found++;
}
}
assert found == 3 : "Expected to find 3 process scans in v1";
// TODO also check query
getTransactionManager().rollback();
/*
* check process scans in v2 as well
*/
registerPlugin("update5-v2_0.xml");
ResourceType platform2 = getResourceType("myPlatform5");
getTransactionManager().begin();
platform2 = em.find(ResourceType.class, platform2.getId());
Set<ResourceType> servers2 = platform2.getChildResourceTypes();
assert servers2.size() == 1 : "Expected to find 1 server in v2, but got " + servers2.size();
ResourceType server2 = servers2.iterator().next();
Set<ProcessScan> scans2 = server2.getProcessScans();
assert scans2.size() == 3 : "Expected to find 3 process scans in v2, but got " + scans2.size();
found = 0;
for (ProcessScan ps : scans2) {
if (containedIn(ps.getName(), new String[] { "JBoss5", "JBoss6", "Hibernate" })) {
found++;
}
}
assert found == 3 : "Expected to find 3 specific process scans in v2, but got " + found;
getTransactionManager().rollback();
/*
* Now return to first version of plugin
*/
registerPlugin("update5-v1_0.xml", "3.0");
platform1 = getResourceType("myPlatform5");
getTransactionManager().begin();
platform1 = em.find(ResourceType.class, platform1.getId());
servers = platform1.getChildResourceTypes();
assert servers.size() == 1 : "Expected to find 1 server in v1, but got " + servers.size();
server1 = servers.iterator().next();
scans1 = server1.getProcessScans();
assert scans1.size() == 3 : "Expected to find 3 process scans in v1, but got " + scans1.size();
found = 0;
for (ProcessScan ps : scans1) {
if (containedIn(ps.getName(), new String[] { "JBoss4", "JBoss5", "JBoss6" })) {
found++;
}
}
assert found == 3 : "Expected to find 3 specific process scans in v1 again, but got " + found;
} finally {
if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
getTransactionManager().rollback();
}
}
}
}