/* * RHQ Management Platform * Copyright (C) 2005-2013 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., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.plugins.jbosscache3.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.math.BigDecimal; import java.util.HashSet; import java.util.Set; import org.rhq.core.clientapi.agent.metadata.PluginMetadataManager; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.measurement.DataType; import org.rhq.core.domain.measurement.MeasurementDataNumeric; import org.rhq.core.domain.measurement.MeasurementDataTrait; import org.rhq.core.domain.measurement.MeasurementDefinition; import org.rhq.core.domain.measurement.MeasurementReport; import org.rhq.core.domain.measurement.MeasurementScheduleRequest; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.pc.PluginContainer; import org.rhq.core.pc.PluginContainerConfiguration; import org.rhq.core.pc.inventory.InventoryManager; import org.rhq.core.pc.plugin.FileSystemPluginFinder; import org.rhq.core.pc.plugin.PluginManager; import org.rhq.core.pc.util.ComponentUtil; import org.rhq.core.pc.util.FacetLockType; import org.rhq.core.pluginapi.measurement.MeasurementFacet; public class TestHelper { public static Set<Resource> getResources(ResourceType resourceType) { InventoryManager inventoryManager = PluginContainer.getInstance() .getInventoryManager(); Set<Resource> resources = inventoryManager .getResourcesWithType(resourceType); return resources; } public static ResourceType getResourceType(String resourceTypeName, String pluginName) { PluginManager pluginManager = PluginContainer.getInstance() .getPluginManager(); PluginMetadataManager pluginMetadataManager = pluginManager .getMetadataManager(); return pluginMetadataManager.getType(resourceTypeName, pluginName); } public static void copyFile(File fileA, File fileB) throws Exception { InputStream in = new FileInputStream(fileB); OutputStream out = new FileOutputStream(fileA); byte[] buf = new byte[1024]; int length; while ((length = in.read(buf)) > 0) { out.write(buf, 0, length); } in.close(); out.close(); } public static boolean compareValues(String value, String type, Object obj) { if (value == null && obj == null) return true; if (type.equals("int")) { Integer val = Integer.valueOf(Double.valueOf(value).intValue()); return obj.equals(val); } if (type.equals("double")) { Double val = Double.valueOf(value); Double orig = (Double) obj; orig = round(orig, 1); return obj.equals(val); } if (type.equals("long")) { Long val = Long.valueOf(Double.valueOf(value).longValue()); return obj.equals(val); } String val2 = obj.toString(); if (value.length() != val2.length()) { val2 = val2.substring(0, value.length()); } return value.equals(val2); } private static double round(double d, int decimalPlace) { BigDecimal bd = new BigDecimal(Double.toString(d)); bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } public static String getMetricValue(Resource resource, String metricName) throws Exception { MeasurementFacet measurementFacet = ComponentUtil .getComponent(resource.getId(), MeasurementFacet.class, FacetLockType.READ, CacheComponentTest.MEASUREMENT_FACET_METHOD_TIMEOUT, true, true, true); ResourceType resourceType = resource.getResourceType(); Set<MeasurementDefinition> metricDefinitions = resourceType .getMetricDefinitions(); for (MeasurementDefinition metricDefinition : metricDefinitions) { if (metricDefinition.getName().equals(metricName)) return getMetricValue(metricDefinition, measurementFacet); } throw new Exception("Metric Name " + metricName + " not found."); } public static String getMetricValue(MeasurementDefinition metricDefinition, MeasurementFacet measurementFacet) throws Exception { String name = metricDefinition.getName(); DataType dataType = metricDefinition.getDataType(); if (dataType == DataType.MEASUREMENT || dataType == DataType.TRAIT) { MeasurementReport report = new MeasurementReport(); Set<MeasurementScheduleRequest> requests = new HashSet<MeasurementScheduleRequest>(); MeasurementScheduleRequest request = new MeasurementScheduleRequest( 1, name, 0, true, dataType); requests.add(request); measurementFacet.getValues(report, requests); if (dataType == DataType.MEASUREMENT) { assert report.getNumericData().isEmpty() || report.getNumericData().size() == 1; assert report.getCallTimeData().isEmpty(); MeasurementDataNumeric dataNumeric = (report.getNumericData() .isEmpty()) ? null : report.getNumericData().iterator() .next(); Double dValue = (dataNumeric != null) ? dataNumeric.getValue() : null; return String.valueOf(dValue); } else if (dataType == DataType.TRAIT) { assert report.getTraitData().isEmpty() || report.getTraitData().size() == 1; MeasurementDataTrait dataTrait = (report.getTraitData().size() == 1) ? report .getTraitData().iterator().next() : null; String value = (dataTrait != null) ? dataTrait.getValue() : null; return value; } } return null; } public static void startContainer(String principal, String credentials) throws Exception { File pluginDir = new File("target/itest/plugins"); PluginContainerConfiguration pcConfig = new PluginContainerConfiguration(); pcConfig.setPluginFinder(new FileSystemPluginFinder(pluginDir)); pcConfig.setPluginDirectory(pluginDir); pcConfig.setInsideAgent(false); PluginContainer container = PluginContainer.getInstance(); PluginContainer.getInstance().setConfiguration(pcConfig); System.out.println("Starting PC..."); PluginContainer.getInstance().initialize(); Set<String> pluginNames = PluginContainer.getInstance() .getPluginManager().getMetadataManager().getPluginNames(); System.out.println("PC started with the following plugins: " + pluginNames); PluginContainer.getInstance().getInventoryManager() .executeServerScanImmediately(); Configuration newConfig = AppServerUtils.getASResource() .getPluginConfiguration(); newConfig.put(new PropertySimple("principal", principal)); newConfig.put(new PropertySimple("credentials", credentials)); int asResourceId = AppServerUtils.getASResource().getId(); PluginContainer.getInstance().getInventoryManager() .updatePluginConfiguration(asResourceId, newConfig); PluginContainer.getInstance().getInventoryManager() .executeServerScanImmediately(); } }