Don't you have a refresh caused by your bundle installation ?

I'm using waitOsgiService() and waitBundleState() methods in examples
itests and it's working fine.

Regards
JB

Le mar. 7 août 2018 à 14:38, Lukasz Lech <[email protected]> a écrit :

> Hello,
>
> It looks that waitForService() and waitBundleState() are not working fine
> for me, they are generating random errors. Locally, about half of the tests
> ‘fail’, but thanks to ‘trick’ in KarafTestSuite they are restarted and on
> 2nd time they work.
> In Gitlab build, this ‘trick’ doesn’t work and all tests fail…
>
> This random error is:
>
> 1)  When I use waitBundleState, it’s IllegalStateException: Invalid
> BundleContext
>
> waitBundleState("com.example.myservice", Bundle.ACTIVE);
>
> java.lang.IllegalStateException: Invalid BundleContext.
>         at
> org.apache.felix.framework.BundleContextImpl.checkValidity(BundleContextImpl.java:511)
>         at
> org.apache.felix.framework.BundleContextImpl.getBundles(BundleContextImpl.java:199)
>         at
> com.riag.karaf.test.commons.KarafTestSupport.findBundleByName(KarafTestSupport.java:647)
>         at
> com.riag.karaf.test.commons.KarafTestSupport.waitBundleState(KarafTestSupport.java:502)
>
> 2) When I use waitForService, it's NoClassDefFoundException:
>
> waitForService(MyService.class, SERVICE_TIMEOUT);
>
> java.lang.NoClassDefFoundError: com/example/service/MyService
> ...
>  Caused by: java.lang.ClassNotFoundException: Unable to load class
> 'com.example.service.MyService' because the bundle wiring for
> PAXEXAM-PROBE-7d20ac86-eee1-44f5-b1ce-56f18ad317d9 is no longer valid.
>         at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1575)
>         at
> org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
>         at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>
> What is interesting, both run in Eclipse and command line (maven) those
> tests fail at random, sometimes it's 1st and 3rd, sometimes 2nd and 4rd.
> Repetition works, so JUNIT tests are passed. Gitlab CI means that tests
> either hang and fail or fail 'immediately' with 1 of above failures.
>
> I'm installing features with command
> featureService.installFeatures(featureSet,
> EnumSet.noneOf(org.apache.karaf.features.FeaturesService.Option.class));
> Then I run one of those waits.
>
> Any thoughts what is going wrong here?
>
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Lukasz Lech
> Sent: Freitag, 3. August 2018 15:53
> To: [email protected]
> Subject: RE: [PAX-EXAM] No runnable methods
>
> Great, Thanks.
>
> waitForService() together with waitBundleState() form KarafTestSupport are
> the working solution for my case.
>
> Best Regards,
> Lukasz Lech
>
>
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Jean-Baptiste Onofré
> Sent: Freitag, 3. August 2018 09:25
> To: [email protected]
> Subject: Re: [PAX-EXAM] No runnable methods
>
> Hi,
> bundles are started by the features service.
> What I do in the Karaf itests is to wait the given OSGi service (there's a
> waitOsgiService() method in itest common).
> Regards
> JB
>
> On 03/08/2018 08:47, Lukasz Lech wrote:
> Hello,
>
> The only problem with installAndAssertFeature() is, I can’t @Inject the
> OSGi service.  I need to take ServiceRefercence from BundleContext.
>
> And one thing bothers me a bit in that scenario. Do FeaturesService wait
> for bundles to start or just installs jars? Some blueprint context might
> take some time to initialize… Is there any reliable mechanism to wait for
> all bundles to start in pax-exam test?
>
> Best regards,
> Lukasz Lech
>
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Jean-Baptiste Onofré
> Sent: Freitag, 3. August 2018 06:38
> To: [email protected]
> Subject: Re: [PAX-EXAM] No runnable methods
>
> Hi Lukasz,
> The boot features are installed in the early stage of the Karaf bootstrap.
> That's why we have to add in the cfg file.
> You can install a feature with the provided features just after the
> bootstrap (in @before as you did).
> So, what's exactly your request ? CoreOptions.featureInstall() would be
> like installAndAssertFeature() (after Karaf bootstrap, mavenBundle()
> doesn't add the bundle in startup.properties for instance, it just installs
> the bundle after Karaf bootstrap).
> Regards
> JB
> On 02/08/2018 17:39, Lukasz Lech wrote:
> A bit self-answering: I’ve taken the class
>
> https://github.com/apache/karaf/blob/master/itests/common/src/main/java/org/apache/karaf/itests/KarafTestSupport.java
> and extended it, basing on tests from the same project.
>
> Which resulted in another question on my side: is there really no option
> to install features on startup other than the trick with
> KarafDistributionOption.editConfigurationFilePut ? The problem with
> editConfigurationFilePut, it replaces the existing option, so I need to
> replicate the existing content.
>
> For feature repositories I’ve based on pax-exam test I’ve found in the
> repo and created helper method to allow easily add custom repos:
>
>     protected Option karafFeaturesOption() {
>       String version = MavenUtils.getArtifactVersion("org.apache.karaf",
> "apache-karaf");
>       StringBuilder sb = new StringBuilder();
>       sb.append("mvn:org.apache.karaf.features/framework/" + version +
> "/xml/features, " +
>                       "mvn:org.apache.karaf.features/spring/" + version +
> "/xml/features, " +
>                       "mvn:org.apache.karaf.features/spring-legacy/" +
> version + "/xml/features, " +
>                       "mvn:org.apache.karaf.features/enterprise/" +
> version + "/xml/features, " +
>                       "mvn:org.apache.karaf.features/enterprise-legacy/" +
> version + "/xml/features");
>       String[] extraFeatures = getAdditionalFeatureRepositories();
>       for (String feature: extraFeatures) {
>         sb.append(", ").append(feature);
>       }
>       return editConfigurationFilePut("etc/org.apache.karaf.features.cfg",
> "featuresRepositories", sb.toString());
>     }
>
> For features, there are too much of them, and I suppose, they change
> between versions? So I’ve called installAndAssertFeature in @Before … That
> works, but needs to be adapted to config file changes, so effectively I
> could take config file from distribution, append feature per hand and
> replace the whole file in Options.
>
> You can install bundles via CoreOptions.mavenBundle(), so I don’t see why
> it shouldn’t be possible for features… Or it’s already supported and I’ve
> failed to find out how?
>
> Best regards,
> Lukasz Lech
>
>
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Lukasz Lech
> Sent: Montag, 30. Juli 2018 12:08
> To: [email protected]
> Subject: [PAX-EXAM] No runnable methods
>
> Hello,
>
> I’m tryin once again to start with pax-exam. I’ve taken the Wiki example
> from
> https://ops4j1.jira.com/wiki/spaces/PAXEXAM4/pages/54263846/Getting+Started+with+OSGi+Tests
> And I’ve created the following code:
>
> @RunWith(PaxExam.class)
> @ExamReactorStrategy(PerMethod.class)
> public class ServiceTest
> {
>
>   @Inject
>   private MyService myService;
>
>   @Configuration
>   public Option[] config() {
>       return options(
>           mavenBundle("com.example", "myservice", "1.0.0-SNAPSHOT"),
>           junitBundles()
>           );
>   }
>
>   @Test
>   public void getService() {
>     assertNotNull(myService);
>   }
>
> }
>
> I’m absolutely astounded by the error message I’ve got:
>
> Java.lang.Exception: No runnable method.
>
> My test method is annotated with org.junit.Test, exactly like on Wiki
> page.
>
> What I’m missing here?
>
> Looking for the same error I’ve found the solutions like here:
> http://permalink.gmane.org/gmane.comp.java.ops4j.general/13999
>
> But changing junitBundles() to new JUnitBundlesOption() has taken
> absolutely no effect, same error message.
>
> My maven dependencies are:
>
>        <dependency>
>            <groupId>javax.inject</groupId>
>            <artifactId>javax.inject</artifactId>
>            <version>1</version>
>         <scope>test</scope>
>        </dependency>
>
>
>         <dependency>
>             <groupId>org.ops4j.pax.exam</groupId>
>             <artifactId>pax-exam-container-karaf</artifactId>
>                     <version>4.1.0</version>
>             <scope>test</scope>
>         </dependency>
>
>         <dependency>
>             <groupId>org.ops4j.pax.exam</groupId>
>             <artifactId>pax-exam-junit4</artifactId>
>                     <version>4.7.0</version>
>             <scope>test</scope>
>         </dependency>
>
>
>
> Best regards,
> Lukasz Lech
>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>
> --
> --
> ------------------
> OPS4J - http://www.ops4j.org - [email protected]
>
> ---
> You received this message because you are subscribed to the Google Groups
> "OPS4J" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
------------------
OPS4J - http://www.ops4j.org - [email protected]

--- 
You received this message because you are subscribed to the Google Groups 
"OPS4J" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to