blob: d256b75c8898e88b9582976407afa35dc2ee503a [file] [log] [blame]
/*
* Copyright (c) 2014, 2015 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.common.util.TransportException;
import org.eclipse.emf.cdo.internal.net4j.protocol.CDOClientProtocol;
import org.eclipse.emf.cdo.net4j.CDONet4jSessionConfiguration;
import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.config.ISessionConfig;
import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
import org.eclipse.emf.cdo.tests.config.impl.SessionConfig;
import org.eclipse.emf.cdo.tests.util.TestRevisionManager;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.net4j.tcp.ITCPConnector;
import org.eclipse.net4j.tcp.TCPUtil;
import org.eclipse.emf.spi.cdo.CDOSessionProtocol;
import org.eclipse.emf.spi.cdo.InternalCDOSession;
/**
* Bug 415836 - Test followings operations :
*
* <ol>
* <li>{@link CDOTransaction#getOrCreateResource(String)}</li>
* <li>{@link CDOTransaction#getOrCreateResourceFolder(String)}</li>
* <li>{@link CDOTransaction#getOrCreateBinaryResource(String)}</li>
* <li>{@link CDOTransaction#getOrCreateTextResource(String)}</li>
* </ol>
*
* @author Esteban Dugueperoux
*/
public class Bugzilla_415836_Test extends AbstractCDOTest
{
private CDOSession session;
private CDOTransaction transaction;
@Override
public void setUp() throws Exception
{
super.setUp();
session = openSession();
transaction = session.openTransaction();
}
public void testCDOTransaction_GetOrCreateResourceWithNullResourcePath() throws Exception
{
try
{
transaction.getOrCreateResource(null);
fail("IllegalArgumentException must be thrown for a null path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateResourceWithEmptyResourcePath() throws Exception
{
try
{
transaction.getOrCreateResource("");
fail("IllegalArgumentException must be thrown for a empty path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateResourceWithExistingResourceAndTimeoutException() throws Exception
{
String resourcePath = getResourcePath("test1");
transaction.getOrCreateResource(resourcePath);
transaction.commit();
transaction.close();
session.close();
session = openSession();
transaction = session.openTransaction();
try
{
enableTimeoutException(true);
transaction.getOrCreateResource(resourcePath);
fail("TransportException must be thrown for a timeout");
}
catch (TransportException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateResourceFolderWithNullResourcePath() throws Exception
{
try
{
transaction.getOrCreateResourceFolder(null);
fail("IllegalArgumentException must be thrown for a null path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateResourceFolderWithEmptyResourcePath() throws Exception
{
try
{
transaction.getOrCreateResourceFolder("");
fail("IllegalArgumentException must be thrown for a empty path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateResourceFolderWithExistingResourceAndTimeoutException() throws Exception
{
String resourcePath = getResourcePath("test1");
transaction.getOrCreateResourceFolder(resourcePath);
transaction.commit();
transaction.close();
session.close();
session = openSession();
transaction = session.openTransaction();
try
{
enableTimeoutException(true);
transaction.getOrCreateResourceFolder(resourcePath);
fail("TransportException must be thrown for a timeout");
}
catch (TransportException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateTextResourceWithNullResourcePath() throws Exception
{
try
{
transaction.getOrCreateTextResource(null);
fail("IllegalArgumentException must be thrown for a null path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateTextResourceWithEmptyResourcePath() throws Exception
{
try
{
transaction.getOrCreateTextResource("");
fail("IllegalArgumentException must be thrown for a empty path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateTextResourceWithExistingResourceAndTimeoutException() throws Exception
{
String resourcePath = getResourcePath("test1");
transaction.getOrCreateTextResource(resourcePath);
transaction.commit();
transaction.close();
session.close();
session = openSession();
transaction = session.openTransaction();
try
{
enableTimeoutException(true);
transaction.getOrCreateTextResource(resourcePath);
fail("TransportException must be thrown for a timeout");
}
catch (TransportException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateBinaryResourceWithNullResourcePath() throws Exception
{
try
{
transaction.getOrCreateBinaryResource(null);
fail("IllegalArgumentException must be thrown for a null path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateBinaryResourceWithEmptyResourcePath() throws Exception
{
try
{
transaction.getOrCreateBinaryResource("");
fail("IllegalArgumentException must be thrown for a empty path");
}
catch (IllegalArgumentException expected)
{
// SUCCESS
}
}
public void testCDOTransaction_GetOrCreateBinaryResourceWithExistingResourceAndTimeoutException() throws Exception
{
String resourcePath = getResourcePath("test1");
transaction.getOrCreateBinaryResource(resourcePath);
transaction.commit();
transaction.close();
session.close();
session = openSession();
transaction = session.openTransaction();
try
{
enableTimeoutException(true);
transaction.getOrCreateBinaryResource(resourcePath);
fail("TransportException must be thrown for a timeout");
}
catch (TransportException expected)
{
// SUCCESS
}
}
public void testEnableDisableTimeoutException()
{
enableTimeoutException(true);
enableTimeoutException(false);
}
@Requires(ISessionConfig.CAPABILITY_NET4J_TCP)
public void testSetSignalTimeoutBeforeSessionOpening()
{
CDONet4jSessionConfiguration configuration = CDONet4jUtil.createNet4jSessionConfiguration();
ITCPConnector connector = TCPUtil.getConnector(getClientContainer(), SessionConfig.Net4j.TCP.CONNECTOR_HOST);
configuration.setConnector(connector);
configuration.setRepositoryName(RepositoryConfig.REPOSITORY_NAME);
configuration.setRevisionManager(new TestRevisionManager());
long signalTimeout = configuration.getSignalTimeout();
long newSignalTimeout = 2 * signalTimeout + 1;
configuration.setSignalTimeout(newSignalTimeout);
InternalCDOSession cdoNet4jSession = (InternalCDOSession)configuration.openNet4jSession();
CDOClientProtocol cdoClientProtocol = (CDOClientProtocol)cdoNet4jSession.getSessionProtocol();
long timeout = cdoClientProtocol.getTimeout();
assertEquals(newSignalTimeout, timeout);
}
private void enableTimeoutException(boolean enable)
{
if (session instanceof InternalCDOSession)
{
InternalCDOSession internalCDOSession = (InternalCDOSession)session;
CDOSessionProtocol sessionProtocol = internalCDOSession.getSessionProtocol();
if (sessionProtocol instanceof CDOClientProtocol)
{
CDOClientProtocol cdoClientProtocol = (CDOClientProtocol)sessionProtocol;
cdoClientProtocol.setTimeout(enable ? 0L : -1L, enable);
}
}
}
}