/*
* 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.credentialsstorage;
import junit.framework.*;
import net.java.sip.communicator.service.credentialsstorage.*;
import org.osgi.framework.*;
/**
* Tests for the @link{CredentialsStorageService}.
*
* @author Dmitri Melnikov
*/
public class TestCredentialsStorageService
extends TestCase
{
/**
* The service we are testing.
*/
private CredentialsStorageService credentialsService = null;
/**
* Prefix for the test account.
*/
private static final String accountPrefix = "my.account.prefix";
/**
* Password for the test account.
*/
private static final String accountPassword = "pa$$W0rt123.";
/**
* The master password.
*/
private static final String masterPassword = "MasterPazz321";
/**
* Another master password.
*/
private static final String otherMasterPassword = "123$ecretPSWRD";
/**
* Generic JUnit Constructor.
*
* @param name the name of the test
*/
public TestCredentialsStorageService(String name)
{
super(name);
BundleContext context = CredentialsStorageServiceLick.bc;
ServiceReference ref =
context.getServiceReference(CredentialsStorageService.class
.getName());
credentialsService =
(CredentialsStorageService) context.getService(ref);
}
/**
* Generic JUnit setUp method.
* @throws Exception if anything goes wrong.
*/
@Override
protected void setUp() throws Exception
{
// set the master password
boolean passSet =
credentialsService.changeMasterPassword(null, masterPassword);
if (!passSet)
{
throw new Exception("Failed to set the master password");
}
credentialsService.storePassword(accountPrefix, accountPassword);
super.setUp();
}
/**
* Generic JUnit tearDown method.
* @throws Exception if anything goes wrong.
*/
@Override
protected void tearDown() throws Exception
{
// remove the password
boolean passRemoved =
credentialsService.changeMasterPassword(masterPassword, null);
if (!passRemoved)
{
throw new Exception("Failed to remove the master password");
}
credentialsService.removePassword(accountPrefix);
}
/**
* Tests if a master password can be verified.
*/
public void testIsVerified()
{
// try to verify a wrong password
boolean verify1 =
credentialsService.verifyMasterPassword(otherMasterPassword);
assertFalse("Wrong password cannot be correct", verify1);
// try to verify a correct password
boolean verify2 =
credentialsService.verifyMasterPassword(masterPassword);
assertTrue("Correct password cannot be wrong", verify2);
}
/**
* Tests whether the loaded password is the same as the stored one.
*/
public void testLoadPassword()
{
String loadedPassword = credentialsService.loadPassword(accountPrefix);
assertEquals("Loaded and stored passwords do not match", accountPassword,
loadedPassword);
}
/**
* Tests whether the service knows that we are using a master password.
*/
public void testIsUsingMasterPassword()
{
boolean isUsing = credentialsService.isUsingMasterPassword();
assertTrue("Master password is used, true expected", isUsing);
}
/**
* Changes the master password to the new value and back again.
*/
public void testChangeMasterPassword()
{
// change MP to a new value
boolean change1 =
credentialsService.changeMasterPassword(masterPassword,
otherMasterPassword);
assertTrue("Changing master password failed", change1);
// account passwords must remain the same
String loadedPassword = credentialsService.loadPassword(accountPrefix);
assertEquals("Account passwords must not differ", loadedPassword,
accountPassword);
// change MP back
boolean change2 =
credentialsService.changeMasterPassword(otherMasterPassword,
masterPassword);
assertTrue("Changing master password back failed", change2);
}
/**
* Test that the service is aware that the account password is stored in an
* encrypted form.
*/
public void testIsStoredEncrypted()
{
boolean storedEncrypted =
credentialsService.isStoredEncrypted(accountPrefix);
assertTrue("Account password is not stored encrypted", storedEncrypted);
}
/**
* Tests whether removing the saved password really removes it.
*/
public void testRemoveSavedPassword()
{
// remove the saved password
credentialsService.removePassword(accountPrefix);
// try to load the password
String loadedPassword = credentialsService.loadPassword(accountPrefix);
assertNull("Password was not removed", loadedPassword);
// save it back again
credentialsService.storePassword(accountPrefix, accountPassword);
}
}