/******************************************************************************
* Copyright (c) 2006, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0
* is available at http://www.opensource.org/licenses/apache2.0.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* VMware Inc.
*****************************************************************************/
package org.eclipse.gemini.blueprint.internal.service.collection.threading;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.gemini.blueprint.service.importer.support.internal.collection.DynamicCollection;
/**
* Multithreading test for DynamicCollection.
*
* @author Costin Leau
*
*/
// S0: T1 -> get iterator, check empty collection
// S1: T2 -> get iterator
// S2: W -> write 2 items
// S3: T2 -> walk the iterator one step
// S4: T1 -> walk the iterator 2 steps
// S5: W -> eliminate one element
// S6: T1 -> check the iterator
// S7: T2 -> check the iterator
public class DynamicCollectionThreadingTest extends BaseThreadingTest {
private Collection col;
public void initialize() {
col = new DynamicCollection();
assertTrue(col.isEmpty());
this.setTrace(true);
}
public void finish() {
col = null;
}
public void threadWriter() throws Exception {
// S2
waitForTick(20);
col.add(new Object());
Object willBeRemoved = new Object();
col.add(willBeRemoved);
// S5
waitForTick(50);
col.remove(willBeRemoved);
}
public void threadIter1() throws Exception {
// S0
Iterator iter = col.iterator();
assertFalse(iter.hasNext());
// S4
waitForTick(40);
assertTrue(iter.hasNext());
iter.next();
assertTrue(iter.hasNext());
iter.next();
// S6
waitForTick(60);
assertFalse(iter.hasNext());
}
public void threadIter2() throws Exception {
// S1
waitForTick(10);
Iterator iter = col.iterator();
// S3
waitForTick(30);
assertTrue(iter.hasNext());
iter.next();
// S7
waitForTick(70);
assertFalse(iter.hasNext());
}
}