| /** |
| * 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 org.apache.aries.jmx; |
| |
| import static org.mockito.Mockito.doReturn; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.spy; |
| import static org.mockito.Mockito.verify; |
| import static org.mockito.Mockito.when; |
| |
| import java.util.concurrent.ExecutorService; |
| import java.util.concurrent.Executors; |
| import java.util.concurrent.TimeUnit; |
| |
| import javax.management.StandardMBean; |
| |
| import org.apache.aries.jmx.agent.JMXAgentContext; |
| import org.junit.After; |
| import org.junit.Test; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.Constants; |
| import org.osgi.framework.Filter; |
| import org.osgi.framework.ServiceReference; |
| |
| public class CompendiumHandlerTest { |
| |
| protected AbstractCompendiumHandler target; |
| |
| @After |
| public void tearDown(){ |
| target = null; |
| } |
| |
| |
| @Test |
| public void testAddingServiceWillInitiateMBeanRegistration() throws Exception { |
| Bundle mockSystemBundle = mock(Bundle.class); |
| when(mockSystemBundle.getSymbolicName()).thenReturn("the.sytem.bundle"); |
| |
| Object service = new Object(); |
| |
| ServiceReference reference = mock(ServiceReference.class); |
| when(reference.getProperty(Constants.SERVICE_ID)).thenReturn(1L); |
| when(reference.getProperty(Constants.OBJECTCLASS)).thenReturn("the class"); |
| |
| BundleContext bundleContext = mock(BundleContext.class); |
| when(bundleContext.getProperty(Constants.FRAMEWORK_UUID)).thenReturn("some-uuid"); |
| when(bundleContext.getService(reference)).thenReturn(service); |
| when(bundleContext.getBundle(0)).thenReturn(mockSystemBundle); |
| |
| Logger agentLogger = mock(Logger.class); |
| JMXAgentContext agentContext = mock(JMXAgentContext.class); |
| when(agentContext.getBundleContext()).thenReturn(bundleContext); |
| when(agentContext.getLogger()).thenReturn(agentLogger); |
| |
| AbstractCompendiumHandler concreteHandler = new CompendiumHandler(agentContext, "org.osgi.service.Xxx"); |
| target = spy(concreteHandler); |
| |
| target.addingService(reference); |
| |
| //service only got once |
| verify(bundleContext).getService(reference); |
| //template method is invoked |
| verify(target).constructInjectMBean(service); |
| //registration is invoked on context |
| verify(agentContext).registerMBean(target); |
| |
| } |
| |
| @Test |
| public void testRemovedServiceWillUnregisterMBean() throws Exception{ |
| |
| Object service = new Object(); |
| ServiceReference reference = mock(ServiceReference.class); |
| when(reference.getProperty(Constants.SERVICE_ID)).thenReturn(1L); |
| when(reference.getProperty(Constants.OBJECTCLASS)).thenReturn("the class"); |
| |
| BundleContext bundleContext = mock(BundleContext.class); |
| Logger agentLogger = mock(Logger.class); |
| JMXAgentContext agentContext = mock(JMXAgentContext.class); |
| when(agentContext.getBundleContext()).thenReturn(bundleContext); |
| when(agentContext.getLogger()).thenReturn(agentLogger); |
| |
| AbstractCompendiumHandler concreteHandler = new CompendiumHandler(agentContext, "org.osgi.service.Xxx"); |
| target = spy(concreteHandler); |
| target.trackedId.set(1); |
| |
| String name = "osgi.compendium:service=xxx,version=1.0"; |
| doReturn(name).when(target).getName(); |
| |
| target.removedService(reference, service); |
| |
| //service unget |
| verify(bundleContext).ungetService(reference); |
| //unregister is invoked on context |
| verify(agentContext).unregisterMBean(target); |
| |
| } |
| |
| |
| |
| /* |
| * Concrete implementation used for test |
| */ |
| class CompendiumHandler extends AbstractCompendiumHandler { |
| |
| protected CompendiumHandler(JMXAgentContext agentContext, Filter filter) { |
| super(agentContext, filter); |
| } |
| |
| protected CompendiumHandler(JMXAgentContext agentContext, String clazz) { |
| super(agentContext, clazz); |
| } |
| |
| protected StandardMBean constructInjectMBean(Object targetService) { |
| return null; |
| } |
| |
| public String getBaseName() { |
| return null; |
| } |
| |
| } |
| } |