use of org.apache.aries.blueprint.testbundlea.NSHandlerTwo in project aries by apache.
the class ASMMultiBundleTest method multiBundleTest.
// TODO This test seems to fail on some runs. Need to stabilize and reenable
@Test
@Ignore
public void multiBundleTest() throws Exception {
// bundlea provides the ns handlers, bean processors, interceptors etc for this test.
Bundle bundlea = context().getBundleByName("org.apache.aries.blueprint.testbundlea");
assertNotNull(bundlea);
bundlea.start();
// bundleb makes use of the extensions provided by bundlea
Bundle bundleb = context().getBundleByName("org.apache.aries.blueprint.testbundleb");
assertNotNull(bundleb);
bundleb.start();
// bundleb's container will hold the beans we need to query to check the function
// provided by bundlea functioned as expected
BlueprintContainer beanContainer = Helper.getBlueprintContainerForBundle(context(), "org.apache.aries.blueprint.testbundleb");
assertNotNull(beanContainer);
// TestBeanA should have the values below, no interference should be present from other sources.
Object obj1 = beanContainer.getComponentInstance("TestBeanA");
assertTrue(obj1 instanceof TestBean);
TestBean testBeanA = (TestBean) obj1;
org.junit.Assert.assertEquals("RED", testBeanA.getRed());
org.junit.Assert.assertEquals("GREEN", testBeanA.getGreen());
org.junit.Assert.assertEquals("BLUE", testBeanA.getBlue());
// TestBeanB tests that a custom ns handler is able to inject custom components to the blueprint,
// and modify existing components, and use injected components as modifications.
Object obj2 = beanContainer.getComponentInstance("TestBeanB");
assertTrue(obj2 instanceof TestBean);
TestBean testBeanB = (TestBean) obj2;
// value should be set in via the added passthroughmetadata via the nshandler.
org.junit.Assert.assertEquals("ONE_VALUE", testBeanB.getRed());
org.junit.Assert.assertEquals("GREEN", testBeanB.getGreen());
org.junit.Assert.assertEquals("BLUE", testBeanB.getBlue());
// TestBeanC tests that custom ns handlers can add interceptors to beans.
Object obj3 = beanContainer.getComponentInstance("TestBeanC");
assertTrue(obj3 instanceof TestBean);
TestBean testBeanC = (TestBean) obj3;
// handlers are in bundlea, with its own container.
BlueprintContainer handlerContainer = Helper.getBlueprintContainerForBundle(context(), "org.apache.aries.blueprint.testbundlea");
assertNotNull(handlerContainer);
Object ns1 = handlerContainer.getComponentInstance("NSHandlerOne");
assertTrue(ns1 instanceof NSHandlerOne);
Object ns2 = handlerContainer.getComponentInstance("NSHandlerTwo");
assertTrue(ns2 instanceof NSHandlerTwo);
NSHandlerTwo nstwo = (NSHandlerTwo) ns2;
// now we have a handle to the nshandler2, we can query what it 'saw', and ensure
// that the interceptors are functioning as expected.
List<String> log = nstwo.getLog();
// TestBeanC has the interceptor configured, and is injected to OtherBeanA & OtherBeanB
// which then uses the injected bean during their init method call, to invoke a method
checkInterceptorLog(new String[] { "PRECALL:TestBeanC:methodToInvoke:[RED]:", "POSTCALL[true]:TestBeanC:methodToInvoke:[RED]:", "PRECALL:TestBeanC:methodToInvoke:[BLUE]:", "POSTCALL[false]:TestBeanC:methodToInvoke:[BLUE]:" }, log);
// invoking GREEN is hardwired to cause an exception response, we do this
// from here to ensure the exception occurs and is visible as expected
RuntimeException re = null;
try {
testBeanC.methodToInvoke("GREEN");
} catch (RuntimeException e) {
re = e;
}
assertNotNull("invocation of Green did not cause an exception as expected", re);
// Exception responses should be intercepted too, test for the POSTCALLWITHEXCEPTION log entry.
log = nstwo.getLog();
checkInterceptorLog(new String[] { "PRECALL:TestBeanC:methodToInvoke:[RED]:", "POSTCALL[true]:TestBeanC:methodToInvoke:[RED]:", "PRECALL:TestBeanC:methodToInvoke:[BLUE]:", "POSTCALL[false]:TestBeanC:methodToInvoke:[BLUE]:", "PRECALL:TestBeanC:methodToInvoke:[GREEN]:", "POSTCALLEXCEPTION[java.lang.RuntimeException: MATCHED ON GREEN (GREEN)]:TestBeanC:methodToInvoke:[GREEN]:" }, log);
// ProcessedBean is a test to ensure that BeanProcessors are called..
// The test has the BeanProcessor look for ProcessableBeans, and log itself with them
Object obj4 = beanContainer.getComponentInstance("ProcessedBean");
assertTrue(obj4 instanceof ProcessableBean);
ProcessableBean pb = (ProcessableBean) obj4;
// Note, the BeanProcessor exists in the same container as the beans it processes!!
Object bp = beanContainer.getComponentInstance("http://ns.handler.three/BeanProcessor");
assertNotNull(bp);
assertTrue(bp instanceof BeanProcessor);
assertEquals(1, pb.getProcessedBy().size());
// check we were invoked..
assertEquals(pb.getProcessedBy().get(0), bp);
// check invocation for each phase.
assertEquals(pb.getProcessedBy(Phase.BEFORE_INIT).get(0), bp);
assertEquals(pb.getProcessedBy(Phase.AFTER_INIT).get(0), bp);
// destroy invocation will only occur at tear down.. TODO, how to test after teardown.
// assertEquals(pb.getProcessedBy(Phase.BEFORE_DESTROY).get(0),bp);
// assertEquals(pb.getProcessedBy(Phase.AFTER_DESTROY).get(0),bp);
Object objOther = beanContainer.getComponentInstance("PlaceHolderTestBean");
assertTrue(objOther instanceof OtherBean);
assertEquals("test1value", ((OtherBean) objOther).getTestValue());
}
Aggregations