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.
