You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by Milan Tomic <to...@yahoo.com> on 2015/01/21 12:39:12 UTC

Unit test execution doesn't wait all bundles to be started

Hello,

If I define PAX EXAM configuration as:

public static Option[] getConfiguration() {
    ...
    mavenBundle().groupId(" myGroupId").artifactId(" myArtifactId").version("1.0.0" ).start(),
    ...
}

then execution of JUnit method waits all bundles to be deployed and started before entering test():

@Test
public void test() {
    // my code here
}

but if I have configuration like this:

public static Option[] getConfiguration() {
    ...
    KarafDistributionOption. features(maven().groupId(" myGroupId")
                .artifactId("myArtifactId"). version("1.0.0").type("xml"). classifier("features"), "my-feature"),
    ...
}

so when I have all my bundles inside feature.xml specified then execution of my JUnit's test() method doesn't wait for all bundles to be loaded and started.

How can I tell PAX-EXAM/Karaf to wait for all bundles to be loaded and started?

Thank you in advance,
Milan

Re: Unit test execution doesn't wait all bundles to be started

Posted by Christian Schneider <ch...@die-schneider.net>.
There is no general facility for this in OSGi.

For karaf we provide a marker service with the 
org.apache.karaf.features.BootFinished interface.

We use it in the karaf itests like this:
     /**
      * To make sure the tests run only when the boot features are fully 
installed
      */
     @Inject
     BootFinished bootFinished;

The service will be started when all bundles have been started.

Be aware though that some startup logic may still be unfinished. For 
example blueprint contexts are started asynchronously after the bundle 
is started.
So the better solution is to inject some service your bundle under test 
starts. Still BootFinished covers a lot of cases where this is not possible.

Christian

On 21.01.2015 12:39, Milan Tomic wrote:
> Hello,
>
> If I define PAX EXAM configuration as:
>
> public static Option[] getConfiguration() {
>     ...
>     mavenBundle().groupId("
> myGroupId").artifactId(" myArtifactId").version("1.0.0" ).start(),
>     ...
> }
>
> then execution of JUnit method waits all bundles to be deployed and 
> started before entering test():
>
> @Test
> public void test() {
>     // my code here
> }
>
> but if I have configuration like this:
>
> public static Option[] getConfiguration() {
>     ...
>     KarafDistributionOption. features(maven().groupId(" myGroupId")
>                 .artifactId("myArtifactId"). 
> version("1.0.0").type("xml"). classifier("features"), "my-feature"),
>     ...
> }
>
> so when I have all my bundles inside feature.xml specified then 
> execution of my JUnit's test() method doesn't wait for all bundles to 
> be loaded and started.
>
> How can I tell PAX-EXAM/Karaf to wait for all bundles to be loaded and 
> started?
>
> Thank you in advance,
> Milan
>




-- 
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com