[ 
https://issues.apache.org/jira/browse/CAMEL-14099?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Christian Eve updated CAMEL-14099:
----------------------------------
    Description: 
Using Camel with OSGi Blueprint XML, mocking OSGi services in the test class 
extending CamelBlueprintTestSupport does not work under some speical 
circumstances.  

In the blueprint.xml, there is the following code:
{code:java}
<bean class=com.myexample.FooBar" id="foobar"> 
   <property name="foo" ref="foo" /> 
</bean> 
<bean class="com.myexample.FooImpl" id="foo"/> 
<reference id="fooBarReference" component-name="foobar" 
interface="com.myexample.FooImpl" ext:proxy-method="classes" />
{code}
The execution on the Karaf server works fine.

Mocking the service 'FooImpl' in the test class failes with
 _java.lang.RuntimeException: Gave up waiting for BlueprintContainer from 
bundle "FooTest" at com.myexample.test.FooTest.setUp(FooTest.java:49)_

The mock setup is done this way:
{code:java}
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, 
Dictionary>> services) {
    FooImpl foo = Mockito.mock(FooImpl.class);      
    services.put(FooImpl.class.getCanonicalName(), asService(foo, null));   
    super.addServicesOnStartup(services); 
}
{code}
 Using an interface as reference instead of a class, the mock works fine:

blueprint.xml:
{code:java}
<reference id="foo" interface="com.myexample.FooInterface" />
{code}
 Mock in test class:
{code:java}
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, 
Dictionary>> services) { 
        FooInterface foo = Mockito.mock(FooImpl.class);     
        services.put(FooInterface.class.getCanonicalName(), asService(foo, 
null));      
        super.addServicesOnStartup(services);       
}
{code}

  was:
Using Camel with OSGi Blueprint XML, mocking OSGi services in the test class 
extending CamelBlueprintTestSupport does not work under some speical 
circumstances. 

 

In the blueprint.xml, there is the following code:
{code:java}
<bean class=com.myexample.FooBar" id="foobar"> 
   <property name="foo" ref="foo" /> 
</bean> 
<bean class="com.myexample.FooImpl" id="foo"/> 
<reference id="fooBarReference" component-name="foobar" 
interface="com.myexample.FooImpl" ext:proxy-method="classes" />
{code}
The execution on the Karaf server works fine.

Mocking the service 'FooImpl' in the test class failes with
 _java.lang.RuntimeException: Gave up waiting for BlueprintContainer from 
bundle "FooTest" at com.myexample.test.FooTest.setUp(FooTest.java:49)_

The mock setup is done this way:
{code:java}
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, 
Dictionary>> services) {
    FooImpl foo = Mockito.mock(FooImpl.class);      
    services.put(FooImpl.class.getCanonicalName(), asService(foo, null));   
    super.addServicesOnStartup(services); 
}
{code}
 

Using an interface as reference instead of a class, the mock works fine:

blueprint.xml:
{code:java}
<reference id="foo" interface="com.myexample.FooInterface" />
{code}
 Mock in test class:
{code:java}
protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, 
Dictionary>> services) { 
        FooInterface foo = Mockito.mock(FooImpl.class);     
        services.put(FooInterface.class.getCanonicalName(), asService(foo, 
null));      
        super.addServicesOnStartup(services);       
}
{code}


> Mocking OSGi Services failes using classes
> ------------------------------------------
>
>                 Key: CAMEL-14099
>                 URL: https://issues.apache.org/jira/browse/CAMEL-14099
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-blueprint
>    Affects Versions: 2.21.0
>         Environment: Camel 2.21.0 on Karaf 4.2.0
>            Reporter: Christian Eve
>            Assignee: Grzegorz Grzybek
>            Priority: Blocker
>              Labels: test
>
> Using Camel with OSGi Blueprint XML, mocking OSGi services in the test class 
> extending CamelBlueprintTestSupport does not work under some speical 
> circumstances.  
> In the blueprint.xml, there is the following code:
> {code:java}
> <bean class=com.myexample.FooBar" id="foobar"> 
>    <property name="foo" ref="foo" /> 
> </bean> 
> <bean class="com.myexample.FooImpl" id="foo"/> 
> <reference id="fooBarReference" component-name="foobar" 
> interface="com.myexample.FooImpl" ext:proxy-method="classes" />
> {code}
> The execution on the Karaf server works fine.
> Mocking the service 'FooImpl' in the test class failes with
>  _java.lang.RuntimeException: Gave up waiting for BlueprintContainer from 
> bundle "FooTest" at com.myexample.test.FooTest.setUp(FooTest.java:49)_
> The mock setup is done this way:
> {code:java}
> protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, 
> Dictionary>> services) {
>     FooImpl foo = Mockito.mock(FooImpl.class);      
>     services.put(FooImpl.class.getCanonicalName(), asService(foo, null));   
>     super.addServicesOnStartup(services); 
> }
> {code}
>  Using an interface as reference instead of a class, the mock works fine:
> blueprint.xml:
> {code:java}
> <reference id="foo" interface="com.myexample.FooInterface" />
> {code}
>  Mock in test class:
> {code:java}
> protected void addServicesOnStartup(Map<String, KeyValueHolder<Object, 
> Dictionary>> services) { 
>         FooInterface foo = Mockito.mock(FooImpl.class);     
>         services.put(FooInterface.class.getCanonicalName(), asService(foo, 
> null));      
>         super.addServicesOnStartup(services);       
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to