/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.slick.protocol.sip; import java.util.*; import junit.framework.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.*; /** * Performs testing on protocol provider methods. * @todo add more detailed docs once the tests are written. * @author Emil Ivov */ public class TestProtocolProviderServiceSipImpl extends TestCase { private static final Logger logger = Logger.getLogger(TestProtocolProviderServiceSipImpl.class); private SipSlickFixture fixture = new SipSlickFixture(); /** * An event adapter that would collec registation state change events */ public RegistrationEventCollector regEvtCollector1 = new RegistrationEventCollector(); /** * An event adapter that would collec registation state change events */ public RegistrationEventCollector regEvtCollector2 = new RegistrationEventCollector(); /** * Creates a test encapsulator for the method with the specified name. * @param name the name of the method this test should run. */ public TestProtocolProviderServiceSipImpl(String name) { super(name); } /** * Initializes the fixture. * @throws Exception if super.setUp() throws one. */ @Override protected void setUp() throws Exception { super.setUp(); fixture.setUp(); } /** * Tears the fixture down. * @throws Exception if fixture.tearDown() fails. */ @Override protected void tearDown() throws Exception { fixture.tearDown(); super.tearDown(); } /** * Makes sure that the instance of the SIP protocol provider that we're * going to use for testing is properly initialized and registered with * a SIP registrar. This MUST be called before any other online testing * of the SIP provider so that we won't have to reregister for every single * test. *
* The method also verifies that a registration event is fired upon
* succesful registration and collected by our event collector.
*
* @throws OperationFailedException if provider.register() fails.
*/
public void testRegister()
throws OperationFailedException
{
//add an event collector that will collect all events during the
//registration and allow us to later inspect them and make sure
//they were properly dispatched.
fixture.provider1.addRegistrationStateChangeListener(regEvtCollector1);
fixture.provider2.addRegistrationStateChangeListener(regEvtCollector2);
//register both our providers
fixture.provider1.register(new SecurityAuthorityImpl(
System.getProperty(SipProtocolProviderServiceLick.ACCOUNT_1_PREFIX
+ ProtocolProviderFactory.PASSWORD).toCharArray()));
fixture.provider2.register(new SecurityAuthorityImpl(
System.getProperty(SipProtocolProviderServiceLick.ACCOUNT_2_PREFIX
+ ProtocolProviderFactory.PASSWORD).toCharArray()));
//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.
logger.debug("Waiting for registration to complete ...");
regEvtCollector1.waitForEvent(40000);
regEvtCollector2.waitForEvent(40000);
//make sure that the registration process trigerred the corresponding
//events.
assertTrue(
"No events were dispatched during the registration process."
,regEvtCollector1.collectedNewStates.size() > 0);
assertTrue(
"No registration event notifying of registration was dispatched. "
+"All events were: " + regEvtCollector1.collectedNewStates
,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);
}
/**
* Verifies that all operation sets have the type they are declarded to
* have.
*
* @throws java.lang.Exception if a class indicated in one of the keys
* could not be forName()ed.
*/
public void testOperationSetTypes() throws Exception
{
Map
* @param realm The realm that the credentials are needed for.
* @param defaultValues the values to propose the user by default
* @param reasonCode the reason for which we're obtaining the
* credentials.
* @return The credentials associated with the specified realm or null
* if none could be obtained.
*/
public UserCredentials obtainCredentials(String realm,
UserCredentials defaultValues,
int reasonCode)
{
return obtainCredentials(realm, defaultValues);
}
/**
* Returns a Credentials object associated with the specified realm.
*
* @param realm The realm that the credentials are needed for.
* @param defaultValues the values to propose the user by default
* @return The credentials associated with the specified realm or null
* if none could be obtained.
*/
public UserCredentials obtainCredentials(String realm,
UserCredentials defaultValues)
{
defaultValues.setPassword(passwd);
return defaultValues;
}
/**
* Sets the userNameEditable property, which should indicate if the
* user name could be changed by user or not.
*
* @param isUserNameEditable indicates if the user name could be changed
*/
public void setUserNameEditable(boolean isUserNameEditable)
{
this.isUserNameEditable = isUserNameEditable;
}
/**
* Indicates if the user name is currently editable, i.e. could be changed
* by user or not.
*
* @return true
if the user name could be changed,
* false
- otherwise.
*/
public boolean isUserNameEditable()
{
return isUserNameEditable;
}
}
}