From 8f4ad1fa4a35a77cd89574a58c255257c767c14c Mon Sep 17 00:00:00 2001 From: Emil Ivov Date: Sun, 3 Sep 2006 09:17:23 +0000 Subject: [PATCH] More sophisticated event collection. Should fix build. --- .../TestProtocolProviderServiceSipImpl.java | 92 ++++++++++++++----- 1 file changed, 67 insertions(+), 25 deletions(-) diff --git a/test/net/java/sip/communicator/slick/protocol/sip/TestProtocolProviderServiceSipImpl.java b/test/net/java/sip/communicator/slick/protocol/sip/TestProtocolProviderServiceSipImpl.java index 794f09f78..b820f0702 100644 --- a/test/net/java/sip/communicator/slick/protocol/sip/TestProtocolProviderServiceSipImpl.java +++ b/test/net/java/sip/communicator/slick/protocol/sip/TestProtocolProviderServiceSipImpl.java @@ -26,11 +26,6 @@ public class TestProtocolProviderServiceSipImpl private SipSlickFixture fixture = new SipSlickFixture(); - /** - * The lock that we wait on until registration is finalized. - */ - private Object registrationLock = new Object(); - /** * An event adapter that would collec registation state change events */ @@ -105,20 +100,9 @@ public void testRegister() //give it enough time to register. We won't really have to wait all this //time since the registration event collector would notify us the moment //we get signed on. - try{ - synchronized(registrationLock){ - logger.debug("Waiting for registration to complete ..."); - registrationLock.wait(40000); - logger.debug("Registration was completed or we lost patience."); - } - } - catch (InterruptedException ex){ - logger.debug("Interrupted while waiting for registration", ex); - } - catch(Throwable th) - { - logger.debug("We got thrown out while waiting for registration", th); - } + logger.debug("Waiting for registration to complete ..."); + regEvtCollector1.waitForEvent(40000); + regEvtCollector2.waitForEvent(40000); //make sure that the registration process trigerred the corresponding //events. @@ -132,8 +116,23 @@ public void testRegister() ,regEvtCollector1.collectedNewStates .contains(RegistrationState.REGISTERED)); + //now the same for provider 2 + assertTrue( + "No events were dispatched during the registration process " + +"of provider2." + ,regEvtCollector2.collectedNewStates.size() > 0); + + assertTrue( + "No registration event notifying of registration was dispatched. " + +"All events were: " + regEvtCollector2.collectedNewStates + ,regEvtCollector2.collectedNewStates + .contains(RegistrationState.REGISTERED)); + + fixture.provider1 .removeRegistrationStateChangeListener(regEvtCollector1); + fixture.provider2 + .removeRegistrationStateChangeListener(regEvtCollector2); } @@ -165,8 +164,8 @@ public void testOperationSetTypes() throws Exception /** * A class that would plugin as a registration listener to a protocol - * provider and simply record all events that it sees and notify the - * registrationLock if it sees an event that notifies us of a completed + * provider and simply record all events that it sees and notifyAll() + * if it sees an event that notifies us of a completed * registration. */ public class RegistrationEventCollector @@ -178,8 +177,7 @@ public class RegistrationEventCollector * The method would simply register all received events so that they * could be available for later inspection by the unit tests. In the * case where a registraiton event notifying us of a completed - * registration is seen, the method would call notifyAll() on the - * registrationLock. + * registration is seen, the method would call notifyAll(). * * @param evt ProviderStatusChangeEvent the event describing the status * change. @@ -193,13 +191,57 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt) if (evt.getNewState().equals(RegistrationState.REGISTERED)) { logger.debug("We're registered and will notify those who wait"); - synchronized (registrationLock) + synchronized (this) + { + notifyAll(); + } + } + } + + /** + * Blocks until an event notifying us of the awaited state change is + * received or until waitFor miliseconds pass (whichever happens first). + * + * @param waitFor the number of miliseconds that we should be waiting + * for an event before simply bailing out. + */ + public void waitForEvent(long waitFor) + { + logger.trace("Waiting for a RegistrationStateChangeEvent"); + + synchronized (this) + { + if (collectedNewStates.contains(RegistrationState.REGISTERED)) { - registrationLock.notifyAll(); + logger.trace("Event already received. " + + collectedNewStates); + return; + } + + try + { + wait(waitFor); + + if (collectedNewStates.size() > 0) + logger.trace( + "Received a RegistrationStateChangeEvent."); + else + logger.trace( + "No RegistrationStateChangeEvent received for " + + waitFor + "ms."); + + } + catch (InterruptedException ex) + { + logger.debug( + "Interrupted while waiting for a " + +"RegistrationStateChangeEvent" + , ex); } } } + } /**