blob: 19bab55da68aa95ff31ef2d9256a5a8d7120dc68 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2006, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
* is available at http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* VMware Inc.
*****************************************************************************/
package org.eclipse.gemini.blueprint.context.support;
import java.io.IOException;
import java.util.Dictionary;
import java.util.Properties;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.eclipse.gemini.blueprint.context.support.AbstractOsgiBundleApplicationContext;
import org.eclipse.gemini.blueprint.io.OsgiBundleResource;
import org.eclipse.gemini.blueprint.util.BundleDelegatingClassLoader;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.core.io.Resource;
import org.eclipse.gemini.blueprint.mock.MockBundleContext;
import org.eclipse.gemini.blueprint.mock.MockServiceRegistration;
/**
* @author Costin Leau
*
*/
public class AbstractRefreshableOsgiBundleApplicationContextTest extends TestCase {
private AbstractOsgiBundleApplicationContext context;
private Bundle bundle;
private BundleContext bundleCtx;
private MockControl bundleCtrl, bundleCtxCtrl;
protected void setUp() throws Exception {
context = new AbstractOsgiBundleApplicationContext() {
protected void loadBeanDefinitions(DefaultListableBeanFactory arg0) throws IOException, BeansException {
}
};
bundleCtxCtrl = MockControl.createStrictControl(BundleContext.class);
bundleCtx = (BundleContext) bundleCtxCtrl.getMock();
bundleCtrl = MockControl.createNiceControl(Bundle.class);
bundle = (Bundle) bundleCtrl.getMock();
bundleCtxCtrl.expectAndReturn(bundleCtx.getBundle(), bundle);
}
protected void tearDown() throws Exception {
context = null;
}
public void testBundleContext() throws Exception {
String location = "osgibundle://someLocation";
Resource bundleResource = new OsgiBundleResource(bundle, location);
Dictionary dict = new Properties();
bundleCtrl.expectAndReturn(bundle.getHeaders(), dict);
bundleCtrl.expectAndReturn(bundle.getSymbolicName(), "symName", MockControl.ONE_OR_MORE);
bundleCtrl.replay();
bundleCtxCtrl.replay();
context.setBundleContext(bundleCtx);
assertSame(bundle, context.getBundle());
assertSame(bundleCtx, context.getBundleContext());
ClassLoader loader = context.getClassLoader();
assertTrue(loader instanceof BundleDelegatingClassLoader);
// do some resource loading
assertEquals(bundleResource, context.getResource(location));
bundleCtrl.verify();
bundleCtxCtrl.verify();
}
public void testServicePublicationBetweenRefreshes() throws Exception {
// [0] = service registration
// [1] = service unregistration
final int[] counters = new int[] { 0, 0 };
MockBundleContext mCtx = new MockBundleContext() {
public ServiceRegistration registerService(String clazz[], Object service, Dictionary properties) {
counters[0]++;
return new MockServiceRegistration(clazz, properties) {
public void unregister() {
counters[1]++;
}
};
}
};
context.setBundleContext(mCtx);
assertEquals(counters[0], 0);
assertEquals(counters[1], 0);
context.refresh();
assertEquals(counters[0], 1);
assertEquals(counters[1], 0);
context.refresh();
assertEquals(counters[0], 2);
assertEquals(counters[1], 1);
}
}