/** * Retrieves a reference to the Gibberish bundle, stops it and uninstalls it and then reinstalls * it in order to make sure that accounts are not reloaded once removed. * * @throws java.lang.Exception if something goes wrong while manipulating the bundles. */ public void testAccountUninstallationPersistence() throws Exception { Bundle providerBundle = GibberishSlickFixture.providerBundle; providerBundle.stop(); assertTrue( "Couldn't stop the protocol provider bundle. State was " + providerBundle.getState(), Bundle.ACTIVE != providerBundle.getState() && Bundle.STOPPING != providerBundle.getState()); providerBundle.uninstall(); assertEquals( "Couldn't stop the protocol provider bundle.", Bundle.UNINSTALLED, providerBundle.getState()); // Now reinstall the bundle and restart the provider providerBundle = GibberishSlickFixture.bc.installBundle(providerBundle.getLocation()); assertEquals( "Couldn't re-install protocol provider bundle.", Bundle.INSTALLED, providerBundle.getState()); AccountManagerUtils.startBundleAndWaitStoredAccountsLoaded( GibberishSlickFixture.bc, providerBundle, "Gibberish"); assertEquals( "Couldn't re-start protocol provider bundle.", Bundle.ACTIVE, providerBundle.getState()); // verify that the provider is not reinstalled ServiceReference[] gibberishProviderRefs = null; try { gibberishProviderRefs = GibberishSlickFixture.bc.getServiceReferences( ProtocolProviderService.class.getName(), "(" + ProtocolProviderFactory.PROTOCOL + "=Gibberish)"); } catch (InvalidSyntaxException ex) { fail("We apparently got our filter wrong " + ex.getMessage()); } // make sure we didn't retrieve a service assertTrue( "A Gibberish Protocol Provider Service was still regged " + "as an osgi service after it was explicitly uninstalled", gibberishProviderRefs == null || gibberishProviderRefs.length == 0); // and a nasty hack at the end - delete the configuration file so that // we get a fresh start on next run. ServiceReference confReference = GibberishSlickFixture.bc.getServiceReference(ConfigurationService.class.getName()); ConfigurationService configurationService = (ConfigurationService) GibberishSlickFixture.bc.getService(confReference); configurationService.purgeStoredConfiguration(); }
/** * Stops and removes the tested bundle, verifies that it has unregistered its provider, then * reloads and restarts the bundle and verifies that the protocol provider is reRegistered in the * bundle context. * * @throws java.lang.Exception if an exception occurs during testing. */ public void testInstallationPersistency() throws Exception { Bundle providerBundle = fixture.findProtocolProviderBundle(fixture.provider1); // set the global providerBundle reference that we will be using // in the last series of tests (Account uninstallation persistency) SipSlickFixture.providerBundle = providerBundle; assertNotNull("Couldn't find a bundle for the tested provider", providerBundle); providerBundle.stop(); assertTrue( "Couldn't stop the protocol provider bundle. State was " + providerBundle.getState(), Bundle.ACTIVE != providerBundle.getState() && Bundle.STOPPING != providerBundle.getState()); providerBundle.uninstall(); assertEquals( "Couldn't stop the protocol provider bundle.", Bundle.UNINSTALLED, providerBundle.getState()); // verify that the provider is no longer available ServiceReference[] sipProviderRefs = null; try { sipProviderRefs = fixture.bc.getServiceReferences( ProtocolProviderService.class.getName(), "(&" + "(" + ProtocolProviderFactory.PROTOCOL + "=" + ProtocolNames.SIP + ")" + "(" + ProtocolProviderFactory.USER_ID + "=" + fixture.userID1 + ")" + ")"); } catch (InvalidSyntaxException ex) { fail("We apparently got our filter wrong: " + ex.getMessage()); } // make sure we didn't see a service assertTrue( "A Protocol Provider Service was still regged as an osgi service " + "for SIP URI:" + fixture.userID1 + "After it was explicitly uninstalled", sipProviderRefs == null || sipProviderRefs.length == 0); // verify that the provider factory knows that we have uninstalled the // provider. assertTrue( "The SIP provider factory kept a reference to the provider we just " + "uninstalled (uri=" + fixture.userID1 + ")", fixture.providerFactory.getRegisteredAccounts().isEmpty() && fixture.providerFactory.getProviderForAccount(fixture.provider1.getAccountID()) == null); // Now reinstall the bundle providerBundle = fixture.bc.installBundle(providerBundle.getLocation()); // set the global providerBundle reference that we will be using // in the last series of tests (Account uninstallation persistency) SipSlickFixture.providerBundle = providerBundle; assertEquals( "Couldn't re-install protocol provider bundle.", Bundle.INSTALLED, providerBundle.getState()); AccountManagerUtils.startBundleAndWaitStoredAccountsLoaded( fixture.bc, providerBundle, ProtocolNames.SIP); assertEquals( "Couldn't re-start protocol provider bundle.", Bundle.ACTIVE, providerBundle.getState()); // Make sure that the provider is there again. // verify that the provider is no longer available try { sipProviderRefs = fixture.bc.getServiceReferences( ProtocolProviderService.class.getName(), "(&" + "(" + ProtocolProviderFactory.PROTOCOL + "=" + ProtocolNames.SIP + ")" + "(" + ProtocolProviderFactory.USER_ID + "=" + fixture.userID1 + ")" + ")"); } catch (InvalidSyntaxException ex) { fail("We apparently got our filter wrong " + ex.getMessage()); } // make sure we didn't see a service assertTrue( "A Protocol Provider Service was not restored after being" + "reinstalled. SIP URI:" + fixture.userID1, sipProviderRefs != null && sipProviderRefs.length > 0); ServiceReference[] sipFactoryRefs = null; try { sipFactoryRefs = fixture.bc.getServiceReferences( ProtocolProviderFactory.class.getName(), "(" + ProtocolProviderFactory.PROTOCOL + "=" + ProtocolNames.SIP + ")"); } catch (InvalidSyntaxException ex) { fail("We apparently got our filter wrong " + ex.getMessage()); } // we're the ones who've reinstalled the factory so it's our // responsibility to update the fixture. fixture.providerFactory = (ProtocolProviderFactory) fixture.bc.getService(sipFactoryRefs[0]); fixture.provider1 = (ProtocolProviderService) fixture.bc.getService(sipProviderRefs[0]); // verify that the provider is also restored in the provider factory // itself assertTrue( "The SIP provider did not restore its own reference to the provider " + "that we just reinstalled (URI=" + fixture.userID1 + ")", !fixture.providerFactory.getRegisteredAccounts().isEmpty() && fixture.providerFactory.getProviderForAccount(fixture.provider1.getAccountID()) != null); }