oh.. yes.. you don't use maven, so you don't have transient dependencies in. Well, yes, then the initial quote of the required artifacts you need at compiletime are a bit more. We just listed the direct dependencies.
There are some more dependencies like ops4j-base (your current exception). I will try to compile a flat list of dependencies with their respective download urls. Sorry for inconvinience. For impatient: you *could* add a pom to your test project, specify the pax exam dependencies as in the tutorial from the wiki and see what you get when doing "mvn eclipse:eclipse" DevCon: Yes, will be there, also with a short talk about Pax Exam. On 5/19/09, David Conde <[email protected]> wrote: > Hi Toni, > > Thank you so much for your answer. > > If I did not misunderstand, there are a lot of things done by Pax Exam which > are transparent to users, so just fixing a couple of configuration > parameters I could get a context similar to the real one with Equinox. > > > I am exactly not using PDE with Eclipse, what I am doing the most of times > is to use Eclipse like a tool to create my bundles in a easier way and then > I export them as a jar files, in order to install them by console in Equinox > framework (using console, not Eclipse running environment). In this way I > have to install all of bundles by myself, so, if I am using a bundle which > use a service from OSGi, which is not included in EQuinox.jar I have to > download it and install as well. > > I removed felix and knopflerfish from configuration part as you said, and I > added : > > provision( > // > bundle( "file:PlatformConfigurationImpl_1.0.0.jar" > ), > bundle( "file:PlatformConfiguration_1.0.0.jar" ) > > ) > > These URLs are the names of my bundles, their symbolic names, and when I > launch this class from console the result is the same, I do not get > anything, however, if I launch from Eclipse click on "Run botton", two > options appear: Run as JUnit Test and Run as Junit Plug-in Test. If I lauch > the first one I get "initialization error" with the next exceptions: > > > > java.lang.NoClassDefFoundError: org/ops4j/lang/NullArgumentException > at > org.ops4j.pax.exam.junit.internal.DefaultConfigMethod.<init>(DefaultConfigMe > thod.java:68) > at > org.ops4j.pax.exam.junit.AnnotatedWithConfiguration.getConfigMethods(Annotat > edWithConfiguration.java:68) > at > org.ops4j.pax.exam.junit.JUnit4TestRunner.getConfigurationMethods(JUnit4Test > Runner.java:137) > at > org.ops4j.pax.exam.junit.JUnit4TestRunner.getTestMethods(JUnit4TestRunner.ja > va:92) > at > org.ops4j.pax.exam.junit.JUnit4TestRunner.<init>(JUnit4TestRunner.java:80) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.ja > va:31) > at > org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder > .java:24) > at > org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java: > 57) > at > org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(Al > lDefaultPossibilitiesBuilder.java:29) > at > org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java: > 57) > at > org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4Test > Reference.java:26) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit > 4TestClassReference.java:24) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4Tes > tLoader.java:40) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4Test > Loader.java:30) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu > nner.java:445) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu > nner.java:673) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. > java:386) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner > .java:196) > Caused by: java.lang.ClassNotFoundException: > org.ops4j.lang.NullArgumentException > at java.net.URLClassLoader$1.run(Unknown Source) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(Unknown Source) > at java.lang.ClassLoader.loadClass(Unknown Source) > at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) > at java.lang.ClassLoader.loadClass(Unknown Source) > at java.lang.ClassLoader.loadClassInternal(Unknown Source) > ... 23 more > > > > > I do not really know what I am missing. In my Scenario, there are two > bundles, one of them it is an interface, and the other one is the > implementation of that interface. > The only thing that my implementation do it is add new properties or remove > them, using PreferenceService from OSGI. > This implementation make use of PreferenceService from the framework, so it > is like an internal bundle which I do not have Access to, I mean, it may be > that I have to include this bundle in "provision part", but the problem is > that I do not have this PreferenceService.jar. > > > Launching as JUnit Plug-in Test (second option) I did not get any result. > > Do I need to include any other bundle in "provision part"? > > > Any idea? > > Thank you in advance. > > I am writing all these steps so that I can write a tutorial about this work. > > By the way, yes I am from Spain, and I would like to go to OSGI DevCon in > Zurich but I will be working in this date. Will you go there? > > > Thank you again! > > > David > -----Mensaje original----- > De: [email protected] [mailto:[email protected]] > En nombre de Toni Menzel > Enviado el: martes, 19 de mayo de 2009 13:18 > Para: Equinox development mailing list > Asunto: Re: [equinox-dev] Testing OSGI Bundles with JUnit > > Hi David, > > let me see. First your configuration is _all_ what your osgi bundle > context will look like. So, currently you specify three frameworks > (felix,equinox,knopflerfish). This will start all three frameworks > after each other and execute your test inside each of them. > To get started and learn the stuff its probably easier to just specify > one framework (equinox for this matter). > > Now, all resources you have in your test-classes output (most of it > are usually your compiled testcases) are bundled up into a bundle with > a fully managed manifest (you cannot control). This is what we call > the "test probe" and exist just to have the test inside the osgi > environment. > > Now, you launch the test just like an ordinary JUnit test (which it > is, from eclipse point of view). > > This should trigger Pax Exam to download everything necessary (more on > that below), launch a new vm per framework, start the framework, > install you "test probe", and trigger the test from inside eclipse via > an rmi remote hook. > > Now, in your case it will not find your Service (Test will fail) > because you test setup is mostly empty. As i mentioned, the what you > define inside the @Configuration method (returning array of Option) > defines your whole test setup: your target vm, your osgi framework + > version, your bundles. > > For target vm you have a default (your JAVA_HOME vm), for framework > you have specified felix,equiniox and knopflerfish (for test, just > keep one for now). > But, you did not mention your bundle. > Now, there are many ways on how you can do this. > Simpliest way is if you bundle is a maven artifact, then you can do > (inside options(..)): > mavenBundle().groupId("foo").artifactId("bar").version("1.0.0") > > If not, you can use basically any url: > bundle(String URL) > > If you really want to keep using PDE, you can do this then: > bundle("file:mybundle.jar") > or so. > > Your configuration then looks like this: > public static Option[] configuration() > { > return options( > equinox(), > provision( > bundle("yourbundleurl"), > bundle("probablyanotherurl"), > ) > ); > } > > To answer the last question about the activator for the test probe: > no, there's no way. (by design if you want. Same for manifest entries. > The Test Probe is not something you should rely on. You can assume > that your injected bundlecontext is a valid BundleContext. And you can > rely on that all your stuff from your test folder will be inside that > test probe. > Finally, the test probe has a (calculated by bytecode inspection) > import-package part with all resolution=optional. > > Tell us about your experience. > > Sure, a detailed howto for eclipse/PDE users would be great. ;) > > I see you are from spain, do you intend to come to OSGi DevCon in > Zurich , June, 22nd ? > > cheers, > Toni > > # > On 5/19/09, David Conde <[email protected]> wrote: >> Hi, >> >> >> >> Thanks Alin for your answer. >> >> >> >> I have tried what you told me in your email. >> >> >> >> I have downloaded >> >> >> >> * <http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam> >> pax-exam >> * >> <http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam-junit> >> pax-exam-junit >> * >> > <http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam-container-de >> fault> pax-exam-container-default >> >> >> >> and I followed : http://wiki.ops4j.org//x/f4Cr >> <http://wiki.ops4j.org/x/f4Cr> . >> >> >> >> These were my steps: >> >> 1. I added the jars previously mentioned in ClassPath (Environment >> Variables) >> >> 2. I created a MyTestClass as shown below: >> >> >> >> import …. >> >> >> >> @RunWith( JUnit4TestRunner.class ) >> >> public class MyUnitTest >> >> { >> >> >> >> @Inject >> >> BundleContext bundleContext; >> >> >> >> @Configuration >> >> public static Option[] configuration() >> >> { >> >> return options( >> >> frameworks( >> >> felix(), >> >> equinox(), >> >> knopflerfish() >> >> ) >> >> >> >> ); >> >> } >> >> >> >> private ServiceTracker tracker; >> >> @Test >> >> public void testMethod() >> >> throws Exception >> >> { >> >> tracker = new ServiceTracker(bundleContext, >> MyServicetobeTEsted.class.getName(), null); >> >> tracker.open(); >> >> >> >> MyServicetobeTEsted service = (MyServicetobeTEsted) >> tracker.getService(); >> >> >> >> org.junit.Assert.assertTrue(service.addValue("Nivel", 5)); >> >> >> >> >> >> } >> >> >> >> } >> >> >> >> 3. I have exported my TestProject in Eclipse as a jar or bundle(I > did >> this in the same way I exported my other Bundles using Eclipse, I mean, I >> have exported my TestProject, which have a package where there is just one >> class (MyUnitTest), and there is no Activator class at all. >> >> 4. I have launched Equinox with MyServicetobeTEsted already > installed >> >> 5. I have installed my TestProject Bundle >> >> 6. I have started my TestProject bundle but I did not get any result >> at all. I do not get any exception neither. >> >> >> >> >> >> >> >> Am I missing anything? >> >> >> >> I have some questions about Pax Exam now: >> >> >> >> -Is it possible to get with Pax Exam the same Visual Interface than JUnit >> uses? >> >> -Where do I get the result from testing? >> >> -Do I have to create Activator class with start method to my TestClass? >> >> >> >> What does it mean that I have to built the TESTBUNDLE on the fly? >> Thank you in advance >> >> >> >> David >> >> >> >> >> >> >> >> >> >> De: [email protected] > [mailto:[email protected]] >> En nombre de Alin Dreghiciu >> Enviado el: viernes, 15 de mayo de 2009 22:57 >> Para: Equinox development mailing list >> Asunto: Re: [equinox-dev] Testing OSGI Bundles with JUnit >> >> >> >> I think an user guide for using Px Exam with Eclipse will be very useful. > If >> Toni does not do it before me, I will during this weekend. >> >> Till then the what you can do is to: >> >> 1. Add this jars to your classpath (take latest) >> >> * <http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam> >> pax-exam >> * >> <http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam-junit> >> pax-exam-junit >> * >> > <http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam-container-de >> fault> pax-exam-container-default >> >> 2. Follow http://wiki.ops4j.org//x/f4Cr <http://wiki.ops4j.org/x/f4Cr> . >> >> >> >> On Fri, May 15, 2009 at 11:42 AM, David Conde <[email protected]> wrote: >> >> >> Hi Toni, >> >> Thank you for your idea! >> >> I have Reading about Pax Exam and I am not clear about what exactly I > have >> to do for installing and using it in Equinox. >> >> I would like to test a simple Bundle which uses Preference Service from >> Equinox. I do not use neither Maven nor other containers, just Equinox > v34. >> >> As I have read in Pax Exam website, If I want to test my Bundle I should >> create a Test Class similar to T1S2_HowToUseBundleContext example, I >> thought, my Test Class should implements TestCase class but I do not see > any >> TestCase implementation in examples so I suppose that using "@RunWith( >> JUnit4TestRunner.class )" it is enough. I asume either that I should also >> include the next piece of code inside to fix Equinox as framework: >> >> @Configuration >> public Option[] configure() { >> return options( >> equinox() >> ); >> } >> >> Either I would have to fix @test in each method which I would like to > test. >> >> Finally I suppose that I would have to add pax-exam-junit.jar from >> > (http://repository.ops4j.org/maven2/org/ops4j/pax/exam/pax-exam-junit/0.5.0/ >> ) and junit.jar from (JUnit website) to the classpath. >> >> So if I am not wrong, the steps to test a Bundle in Equinox would be like > as >> shown below: >> >> 1-Include pax-exam-junit.jar and junit.jar in ClassPath >> 2-Create a new Bundle which will create a MyTestClass instance (with >> �...@runwith( JUnit4TestRunner.class )" included. >> 3-Call to Preference Service from BundleContext object as the same way as > I >> did using the real Context in real bundles. >> 4- Launch Equinox with all the Bundles >> >> And now, my questions are? HOw BundleContext can call to >> bundleContext.getBundles method if it was defined as null in >> T1S2_HowToUseBundleContext example? >> >> Could I call for example >> bundleContext.getService(“PreferenceServiceReference”)? >> >> >> I either would like to ask about the results, how do I get test results? > Is >> it possible to use junit.swingui.TestRunner in order to get results as a >> visual interface? >> >> >> Thank you in advance >> >> David >> >> -----Mensaje original----- >> De: [email protected] > [mailto:[email protected]] >> En nombre de Toni Menzel >> Enviado el: jueves, 14 de mayo de 2009 12:06 >> Para: Equinox development mailing list >> Asunto: Re: [equinox-dev] Testing OSGI Bundles with JUnit >> >> >> Have you had a look at pax exam >> (http://wiki.ops4j.org/display/paxexam/Pax+Exam) ? >> >> It actually lets you write Junit Tests in OSGi Framework independent way. >> You finally wrap your test in a test probe bundle (built on the fly), >> start your target framework (equinox in this case), provision it with >> you setup (extra bundles), and thats about it. >> >> IF you use PDE (because you pointed to the fact you are using eclipse >> a couple of times): >> Without external means like maven you probably end up re-specifiying >> all your dependencies again just for test setup. >> >> Tell us if you do or not as it might help us a lot to get you started >> with pax exam. >> >> Finally, in exam you end up inside an isolated vm process running just >> your test vm with your test framework >> (Equinox,Felix,Knopflerfish,Concierge, all recent versions at you >> fingertipps) exactly as specified. From there you (currently) get the >> (real!) bundleContext from where you probably get any service you >> want. >> >> Toni >> >> >> >> >> On 5/14/09, David Conde <[email protected]> wrote: >>> Hi everyone, >>> >>> >>> >>> I am trying to do test cases for OSGI Bundles in Equinox, using Eclipse. > I >>> found the problem when I tried to model BundleContext and services like >>> Preference Services, which are complex objects. I read about how I could >>> solve this problem and I found some libraries from Spring Framework which >>> use “mocks” to test BundleContext, but I am not sure if these ones >> provided >>> special Services likes Preference services. So, my question is , is there >>> any library with mocks to simulate BundleContext and other complex > Equinox >>> classes? Is there any library provided by Equinox? >>> >>> >>> >>> Thank you in advance >>> >>> >>> >>> >>> >>> -- >>> >>> David Conde Baena >>> >>> >>> CITIC >>> Centro Andaluz de Innovación y Tecnologías de la Información y las >>> Comunicaciones >>> Edificio CITIC, C/ Marie Curie, 6 >>> Parque Tecnológico de Andalucía >>> 29590 - Campanillas (MÁLAGA) >>> >>> Tfno.: +34 952028610 >>> Fax: +34 951231029 >>> <mailto:[email protected]> Email: [email protected] >>> <http://www.citic.es/> Web: www.citic.es >>> >>> >>> >>> >>> >>> >> >> >> -- >> Toni Menzel >> Independent Software Developer - Looking for new projects! >> Professional Profile: http://www.osgify.com >> Blog: tonitcom.blogspot.com >> [email protected] >> http://www.ops4j.org - New Energy for OSS Communities - Open >> Participation Software. >> _______________________________________________ >> equinox-dev mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/equinox-dev >> >> _______________________________________________ >> equinox-dev mailing list >> [email protected] >> https://dev.eclipse.org/mailman/listinfo/equinox-dev >> >> >> >> >> -- >> Alin Dreghiciu >> Software Developer - Looking for new projects! >> My profile: http://www.linkedin.com/in/alindreghiciu >> My blog: http://adreghiciu.blogspot.com >> http://www.ops4j.org - New Energy for OSS Communities - Open Participation >> Software. >> http://www.qi4j.org - New Energy for Java - Domain Driven Development. >> >> > > > -- > Toni Menzel > Independent Software Developer - Looking for new projects! > Professional Profile: http://www.osgify.com > Blog: tonitcom.blogspot.com > [email protected] > http://www.ops4j.org - New Energy for OSS Communities - Open > Participation Software. > _______________________________________________ > equinox-dev mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/equinox-dev > > _______________________________________________ > equinox-dev mailing list > [email protected] > https://dev.eclipse.org/mailman/listinfo/equinox-dev > -- Toni Menzel Independent Software Developer - Looking for new projects! Professional Profile: http://www.osgify.com Blog: tonitcom.blogspot.com [email protected] http://www.ops4j.org - New Energy for OSS Communities - Open Participation Software. _______________________________________________ equinox-dev mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/equinox-dev
