| /* |
| * 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(); |
| } |
| } |
| } |