package org.examples.twitterclient.service; import java.io.IOException; import java.io.InputStream; import java.io.File; import java.io.FileOutputStream; import java.io.FileInputStream; import org.junit.runner.RunWith; import static org.junit.Assert.*; import org.junit.Test; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; import org.osgi.framework.ServiceReference; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; import org.osgi.service.packageadmin.PackageAdmin; import org.ops4j.pax.exam.junit.JUnit4TestRunner; import org.ops4j.pax.exam.junit.Configuration; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.Inject; import org.ops4j.pax.exam.Customizer; import org.ops4j.pax.swissbox.tinybundles.core.TinyBundles; import org.examples.twitterclient.api.TwitterService; import org.examples.twitterclient.api.TwitterBackend; import org.examples.twitterclient.service.MockTwitterImpl; import static org.ops4j.pax.exam.CoreOptions.*; import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.*; import org.ops4j.io.StreamUtils; @RunWith( JUnit4TestRunner.class ) public class TwitterServiceTest { @Configuration public static Option[] configure() { return options( // add Guice provision( mavenBundle( "com.google.inject", "guice", "2.0" ) // mavenBundle( "org.ops4j.pax.exam","pax-exam-growl","1.2.0-SNAPSHOT" ) ), // the API Bundle provision( newBundle() .add( TwitterService.class ) .add( TwitterBackend.class ) .build( withBnd() ) ), // the service bundle provision( newBundle() .add( MockTwitterImpl.class ) .add( MockTwitterImpl.Foo.class ) .build( withBnd() ) ), new Customizer() { @Override public InputStream customizeTestProbe( InputStream testProbe ) throws IOException { return TinyBundles.modifyBundle( testProbe ).removeHeader( Constants.EXPORT_PACKAGE).build(); } }, felix().snapshotVersion() ); } @Inject BundleContext context; //@Test public void runMyService() throws BundleException, IOException { for( Bundle b : context.getBundles() ) { System.out.println( "b: " + b.getSymbolicName() + " is " + b.getState() ); } // check classloader refs: assertNotNull( MockTwitterImpl.class ); assertNotNull( MockTwitterImpl.Foo.class ); new MockTwitterImpl.Foo(); System.out.println(); // check and call service ServiceReference ref = context.getServiceReference( TwitterService.class.getName() ); assertNotNull( ref ); TwitterService service = (TwitterService) context.getService( ref ); assertNotNull( service ); service.send( "Toni" ); context.ungetService( ref ); } //@Test public void p1() { System.out.println( "Hello!" ); } @Test public void p2() { PackageAdmin admin = (PackageAdmin) context.getService( context.getServiceReference( PackageAdmin.class.getName() ) ); System.out.println( "Exporting: " + admin.getExportedPackage( "org.osgi.framework" ).getVersion() ); System.out.println( "Export: " + context.getBundle( ).getHeaders().get( Constants.EXPORT_PACKAGE ) ); System.out.println( "Hello!" ); //assertEquals( "My-very-own-probe", context.getBundle().getHeaders().get( Constants.BUNDLE_SYMBOLICNAME ) ); } }