blob: 34f8a05194d85ff6401c01c498b14c85672a9937 [file] [log] [blame]
/*
* Copyright (c) 2007-2012 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.util.tests;
import org.eclipse.net4j.util.concurrent.ISynchronizer;
import org.eclipse.net4j.util.concurrent.SynchronizingCorrelator;
/**
* @author Eike Stepper
*/
public class SynchronizingCorrelatorTest extends AbstractOMTest
{
public void testPutConsumerFirst() throws Exception
{
final Boolean[] result = { false };
final SynchronizingCorrelator<String, Boolean> correlator = new SynchronizingCorrelator<String, Boolean>();
final Thread consumer = new Thread()
{
@Override
public void run()
{
ISynchronizer<Boolean> eike = correlator.correlate("eike"); //$NON-NLS-1$
result[0] = eike.get(5000);
msg("RESULT: " + result[0]); //$NON-NLS-1$
}
};
consumer.start();
sleep(100);
correlator.put("eike", true, DEFAULT_TIMEOUT); //$NON-NLS-1$
consumer.join(DEFAULT_TIMEOUT);
assertEquals(Boolean.TRUE, result[0]);
}
public void testPutConsumerFirst10() throws Exception
{
for (int i = 0; i < 10; i++)
{
testPutConsumerFirst();
}
}
public void testBlockingPutConsumerFirst() throws Exception
{
final Boolean[] result = { false };
final SynchronizingCorrelator<String, Boolean> correlator = new SynchronizingCorrelator<String, Boolean>();
final Thread consumer = new Thread()
{
@Override
public void run()
{
ISynchronizer<Boolean> eike = correlator.correlate("eike"); //$NON-NLS-1$
result[0] = eike.get(5000);
msg("RESULT: " + result[0]); //$NON-NLS-1$
}
};
consumer.start();
Thread.sleep(10);
boolean consumed = correlator.put("eike", true, 1000); //$NON-NLS-1$
msg("Consumed: " + consumed); //$NON-NLS-1$
assertEquals(true, consumed);
consumer.join(1000);
assertEquals(Boolean.TRUE, result[0]);
}
public void testBlockingPutConsumerFirst10() throws Exception
{
for (int i = 0; i < 10; i++)
{
testBlockingPutConsumerFirst();
}
}
public void _testPutProducerFirst() throws Exception
{
final Boolean[] result = { false };
final SynchronizingCorrelator<String, Boolean> correlator = new SynchronizingCorrelator<String, Boolean>();
correlator.put("eike", true, DEFAULT_TIMEOUT); //$NON-NLS-1$
final Thread consumer = new Thread()
{
@Override
public void run()
{
ISynchronizer<Boolean> eike = correlator.correlate("eike"); //$NON-NLS-1$
result[0] = eike.get(5000);
msg("RESULT: " + result[0]); //$NON-NLS-1$
}
};
consumer.start();
Thread.sleep(10);
consumer.join(100);
assertEquals(Boolean.TRUE, result[0]);
}
public void _testPutProducerFirst10() throws Exception
{
for (int i = 0; i < 10; i++)
{
_testPutProducerFirst();
}
}
public void testBlockingPutProducerFirst() throws Exception
{
final Boolean[] result = { false };
final SynchronizingCorrelator<String, Boolean> correlator = new SynchronizingCorrelator<String, Boolean>();
boolean consumed = correlator.put("eike", true, 50); //$NON-NLS-1$
msg("Consumed: " + consumed); //$NON-NLS-1$
assertEquals(false, consumed);
final Thread consumer = new Thread()
{
@Override
public void run()
{
ISynchronizer<Boolean> eike = correlator.correlate("eike"); //$NON-NLS-1$
result[0] = eike.get(5000);
msg("RESULT: " + result[0]); //$NON-NLS-1$
}
};
consumer.start();
Thread.sleep(10);
consumer.join(1000);
assertEquals(Boolean.TRUE, result[0]);
}
public void testBlockingPutProducerFirst10() throws Exception
{
for (int i = 0; i < 10; i++)
{
testBlockingPutProducerFirst();
}
}
}