blob: 3ea6ad03b990f748eac43d06007a4ebac1e42df1 [file] [log] [blame]
/*
* Copyright (c) 2014, 2016 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Esteban Dugueperoux - initial API and implementation
*/
package org.eclipse.emf.cdo.tests.bugzilla;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
import org.eclipse.net4j.util.security.IPasswordCredentials;
import org.eclipse.net4j.util.security.PasswordCredentials;
import org.eclipse.net4j.util.security.UserManager;
/**
* Bug 427773 - [Security] BadPaddingException on opening an authenticated CDOSession.
*
* @author Esteban Dugueperoux
*/
public class Bugzilla_427773_Test extends AbstractCDOTest
{
private static final int NUMBER_OF_THREADS = 50;
private static final IPasswordCredentials USER_1_CREDENTIALS = new PasswordCredentials("user1", "12345");
@Override
public void setUp() throws Exception
{
UserManager userManager = new UserManager();
userManager.activate();
userManager.addUser(USER_1_CREDENTIALS.getUserID(), USER_1_CREDENTIALS.getPassword());
getTestProperties().put(RepositoryConfig.PROP_TEST_AUTHENTICATOR, userManager);
super.setUp();
}
@CleanRepositoriesAfter(reason = "Repository not used again")
public void testParallelAuthenticatedSessionOpening() throws Exception
{
getRepository();
CDOSessionOpener[] sessionOpeners = new CDOSessionOpener[NUMBER_OF_THREADS];
Thread[] sessionOpenerThreads = new Thread[NUMBER_OF_THREADS];
for (int i = 0; i < NUMBER_OF_THREADS; i++)
{
sessionOpeners[i] = new CDOSessionOpener();
}
for (int i = 0; i < NUMBER_OF_THREADS; i++)
{
msg("Session " + i);
Thread sessionOpenerThread = new Thread(sessionOpeners[i]);
sessionOpenerThread.start();
sessionOpenerThreads[i] = sessionOpenerThread;
}
for (int i = 0; i < NUMBER_OF_THREADS; i++)
{
sessionOpenerThreads[i].join(DEFAULT_TIMEOUT);
sessionOpeners[i].close();
Exception exception = sessionOpeners[i].getException();
if (exception != null)
{
throw exception;
}
}
}
/**
* @author Esteban Dugueperoux
*/
private final class CDOSessionOpener implements Runnable
{
private CDOSession session;
private Exception exception;
public CDOSessionOpener()
{
}
public Exception getException()
{
return exception;
}
public void run()
{
try
{
session = openSession(USER_1_CREDENTIALS);
}
catch (Exception ex)
{
ex.printStackTrace();
exception = ex;
}
}
public void close()
{
if (session != null)
{
session.close();
}
}
}
}