/*
* 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.jabber;
import java.util.*;
import junit.framework.*;
import net.java.sip.communicator.service.certificate.*;
import net.java.sip.communicator.service.protocol.*;
import org.jitsi.service.configuration.*;
import org.osgi.framework.*;
/**
* Test for account installation.
*
* @author Damian Minkov
* @author Valentin Martinet
*/
public class TestAccountInstallation
extends TestCase
{
/**
* Creates the test with the specified method name.
* @param name the name of the method to execute.
*/
public TestAccountInstallation(String name)
{
super(name);
}
/**
* JUnit setup method.
* @throws Exception in case anything goes wrong.
*/
@Override
protected void setUp() throws Exception
{
super.setUp();
}
/**
* JUnit teardown method.
* @throws Exception in case anything goes wrong.
*/
@Override
protected void tearDown() throws Exception
{
super.tearDown();
}
/**
* Installs an account and verifies whether the installation has gone well.
*/
public void testInstallAccount()
{
// first obtain a reference to the provider factory
ServiceReference[] serRefs = null;
String osgiFilter = "(" + ProtocolProviderFactory.PROTOCOL
+ "="+ProtocolNames.JABBER+")";
try{
serRefs = JabberSlickFixture.bc.getServiceReferences(
ProtocolProviderFactory.class.getName(), osgiFilter);
}
catch (InvalidSyntaxException ex)
{
//this really shouldhn't occur as the filter expression is static.
fail(osgiFilter + " is not a valid osgi filter");
}
assertTrue(
"Failed to find a provider factory service for protocol Jabber",
serRefs != null && serRefs.length > 0);
// Enable always trust mode for testing tls jabber connections
ServiceReference confReference
= JabberSlickFixture.bc.getServiceReference(
ConfigurationService.class.getName());
ConfigurationService configurationService
= (ConfigurationService) JabberSlickFixture.
bc.getService(confReference);
configurationService.setProperty(
CertificateService.PNAME_ALWAYS_TRUST,
Boolean.TRUE);
//Keep the reference for later usage.
ProtocolProviderFactory jabberProviderFactory = (ProtocolProviderFactory)
JabberSlickFixture.bc.getService(serRefs[0]);
//make sure the account is empty
assertTrue("There was an account registered with the account mananger "
+"before we've installed any",
jabberProviderFactory.getRegisteredAccounts().size() == 0);
//Prepare the properties of the first jabber account.
Hashtable<String, String> jabberAccount1Properties
= getAccountProperties(
JabberProtocolProviderServiceLick.ACCOUNT_1_PREFIX);
Hashtable<String, String> jabberAccount2Properties
= getAccountProperties(
JabberProtocolProviderServiceLick.ACCOUNT_2_PREFIX);
Hashtable<String, String> jabberAccount3Properties
= getAccountProperties(
JabberProtocolProviderServiceLick.ACCOUNT_3_PREFIX);
//try to install an account with a null account id
try{
jabberProviderFactory.installAccount(
null, jabberAccount1Properties);
fail("installing an account with a null account id must result "
+"in a NullPointerException");
}catch(NullPointerException exc)
{
//that's what had to happen
}
//now really install the accounts
jabberProviderFactory.installAccount(
jabberAccount1Properties.get(ProtocolProviderFactory.USER_ID)
, jabberAccount1Properties);
jabberProviderFactory.installAccount(
jabberAccount2Properties.get(ProtocolProviderFactory.USER_ID)
, jabberAccount2Properties);
jabberProviderFactory.installAccount(
jabberAccount3Properties.get(ProtocolProviderFactory.USER_ID)
, jabberAccount3Properties);
//try to install one of the accounts one more time and verify that an
//excepion is thrown.
try{
jabberProviderFactory.installAccount(
jabberAccount1Properties.get(ProtocolProviderFactory.USER_ID)
, jabberAccount1Properties);
fail("An IllegalStateException must be thrown when trying to "+
"install a duplicate account");
}catch(IllegalStateException exc)
{
//that's what supposed to happen.
}
//Verify that the provider factory is aware of our installation
assertTrue(
"The newly installed account was not in the acc man's "
+"registered accounts!",
jabberProviderFactory.getRegisteredAccounts().size() == 3);
//Verify protocol providers corresponding to the new account have
//been properly registered with the osgi framework.
osgiFilter =
"(&("+ProtocolProviderFactory.PROTOCOL +"="+ProtocolNames.JABBER+")"
+"(" + ProtocolProviderFactory.USER_ID
+ "=" + jabberAccount1Properties.get(
ProtocolProviderFactory.USER_ID)
+ "))";
try
{
serRefs = JabberSlickFixture.bc.getServiceReferences(
ProtocolProviderService.class.getName(),
osgiFilter);
}
catch (InvalidSyntaxException ex)
{
//this really shouldhn't occur as the filter expression is static.
fail(osgiFilter + "is not a valid osgi filter");
}
assertTrue("An protocol provider was apparently not installed as "
+ "requested."
, serRefs != null && serRefs.length > 0);
Object jabberProtocolProvider
= JabberSlickFixture.bc.getService(serRefs[0]);
assertTrue("The installed protocol provider does not implement "
+ "the protocol provider service."
,jabberProtocolProvider instanceof ProtocolProviderService);
}
/**
* Returns all properties necessary for the intialization of the account
* with <tt>accountPrefix</tt>.
* @param accountPrefix the prefix contained by all property names for the
* the account we'd like to initialized
* @return a Hashtable that can be used when creating the account in a
* protocol provider factory.
*/
private Hashtable<String, String> getAccountProperties(String accountPrefix)
{
Hashtable<String, String> table = new Hashtable<String, String>();
String userID = System.getProperty(
accountPrefix + ProtocolProviderFactory.USER_ID, null);
assertNotNull(
"The system property named "
+ accountPrefix + ProtocolProviderFactory.USER_ID
+" has to tontain a valid Jabber address that could be used during "
+"SIP Communicator's tests."
, userID);
table.put(ProtocolProviderFactory.USER_ID, userID);
String passwd = System.getProperty(
accountPrefix + ProtocolProviderFactory.PASSWORD, null );
assertNotNull(
"The system property named "
+ accountPrefix + ProtocolProviderFactory.PASSWORD
+" has to contain the password corresponding to the account "
+ "specified in "
+ accountPrefix + ProtocolProviderFactory.USER_ID
, passwd);
table.put(ProtocolProviderFactory.PASSWORD, passwd);
String serverAddress
= System.getProperty(accountPrefix
+ ProtocolProviderFactory.SERVER_ADDRESS, null);
// optional
if(serverAddress != null)
table.put(ProtocolProviderFactory.SERVER_ADDRESS, serverAddress);
String serverPort = System.getProperty(
accountPrefix + ProtocolProviderFactory.SERVER_PORT, null);
// optional
if(serverPort != null)
table.put(ProtocolProviderFactory.SERVER_PORT, serverPort);
return table;
}
}