/* * RHQ Management Platform * Copyright (C) 2005-2014 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, * Inc51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.plugins.cassandra; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.testng.PowerMockObjectFactory; import org.testng.IObjectFactory; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails; import org.rhq.core.pluginapi.inventory.ResourceContext; import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext; import org.rhq.core.system.ProcessInfo; import org.rhq.plugins.jmx.MBeanResourceDiscoveryComponent; /** * @author Michael Burman */ @PrepareForTest({MBeanResourceDiscoveryComponent.class}) public class DiscoveryTest { private Log log = LogFactory.getLog(DiscoveryTest.class); @ObjectFactory public IObjectFactory getObjectFactory() { return new PowerMockObjectFactory(); } @Test public void testResourceKeyParsing() throws Exception { // Mock discovered resources Configuration pluginConfiguration = mock(Configuration.class); DiscoveredResourceDetails details = new DiscoveredResourceDetails(mock(ResourceType.class), "org.apache.cassandra.db:type=ColumnFamilies,keyspace=rhq,columnfamily=raw_metrics", "1", "2", "3", mock(Configuration.class), mock(ProcessInfo.class)); DiscoveredResourceDetails details2 = new DiscoveredResourceDetails(mock(ResourceType.class), "org.apache.cassandra.db:type=ColumnFamilies,columnfamily=raw_metrics", "1", "2", "3", mock(Configuration.class), mock(ProcessInfo.class)); final Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>(); discoveredResources.add(details); discoveredResources.add(details2); // Replace method.. Method discover = MBeanResourceDiscoveryComponent.class.getMethod("discoverResources", ResourceDiscoveryContext.class, boolean.class); PowerMockito.replace(discover).with(new InvocationHandler() { @Override public Object invoke(Object o, Method method, Object[] objects) throws Throwable { return discoveredResources; } }); ColumnFamilyDiscoveryComponent columnFamilyDiscoveryComponent = new ColumnFamilyDiscoveryComponent(); // Mock keyspace context ResourceDiscoveryContext mockContext = mock(ResourceDiscoveryContext.class); ResourceContext mockParentContext = mock(ResourceContext.class); when(mockContext.getParentResourceContext()).thenReturn(mockParentContext); when(mockParentContext.getResourceKey()).thenReturn("rhq"); assertEquals(mockContext.getParentResourceContext().getResourceKey(), "rhq"); // Do the actual discovery parsing Set<DiscoveredResourceDetails> discoveredResourceDetails = columnFamilyDiscoveryComponent.discoverResources(mockContext); assertEquals(discoveredResourceDetails.size(), 1); for (DiscoveredResourceDetails discoveredResource : discoveredResourceDetails) { assertEquals(discoveredResource.getResourceKey(), "raw_metrics"); } } }