/*******************************************************************************
* Copyright (c) 2008, 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
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.deployer.core.internal;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.eclipse.virgo.nano.core.AbortableSignal;
import org.junit.Before;
import org.junit.Test;
/**
*/
public class AbortableSignalJunctionTests {
private AbortableSignal signal;
private boolean signalCompleted;
private boolean signalFailed;
private boolean signalAborted;
@Before
public void setUp() {
this.signalCompleted = false;
this.signalFailed = false;
this.signal = new AbortableSignal(){
public void signalFailure(Throwable cause) {
signalFailed = true;
}
public void signalSuccessfulCompletion() {
signalCompleted = true;
}
public void signalAborted() {
signalAborted = true;
}
};
}
@Test
public void testEmptyJunction() {
new AbortableSignalJunction(this.signal, 0);
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testUnaryJunction() {
AbortableSignalJunction sj = new AbortableSignalJunction(this.signal, 1);
sj.getSignals().get(0).signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testBinaryJunction() {
AbortableSignalJunction sj = new AbortableSignalJunction(this.signal, 2);
sj.getSignals().get(0).signalSuccessfulCompletion();
sj.getSignals().get(1).signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testBinaryJunctionFail() {
AbortableSignalJunction sj = new AbortableSignalJunction(this.signal, 2);
sj.getSignals().get(0).signalFailure(new RuntimeException());
assertFalse(this.signalCompleted);
assertTrue(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testBinaryJunctionAbort() {
AbortableSignalJunction sj = new AbortableSignalJunction(this.signal, 2);
sj.getSignals().get(0).signalAborted();
assertFalse(this.signalCompleted);
assertFalse(this.signalFailed);
assertTrue(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrder1() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
top1.signalSuccessfulCompletion();
bottom1.signalSuccessfulCompletion();
bottom2.signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrder2() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
bottom1.signalSuccessfulCompletion();
top1.signalSuccessfulCompletion();
bottom2.signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrder3() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
bottom1.signalSuccessfulCompletion();
bottom2.signalSuccessfulCompletion();
top1.signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrder4() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
top1.signalSuccessfulCompletion();
bottom2.signalSuccessfulCompletion();
bottom1.signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrder5() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
bottom2.signalSuccessfulCompletion();
top1.signalSuccessfulCompletion();
bottom1.signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrder6() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
bottom2.signalSuccessfulCompletion();
bottom1.signalSuccessfulCompletion();
top1.signalSuccessfulCompletion();
assertTrue(this.signalCompleted);
assertFalse(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrderFail() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
top1.signalSuccessfulCompletion();
bottom1.signalFailure(new RuntimeException());
bottom2.signalSuccessfulCompletion();
assertFalse(this.signalCompleted);
assertTrue(this.signalFailed);
assertFalse(this.signalAborted);
}
@Test
public void testNestedBinaryJunctionOrderAbort() {
AbortableSignalJunction top = new AbortableSignalJunction(this.signal, 2);
AbortableSignal top1 = top.getSignals().get(0);
AbortableSignal top2 = top.getSignals().get(1);
AbortableSignalJunction bottom = new AbortableSignalJunction(top2, 2);
AbortableSignal bottom1 = bottom.getSignals().get(0);
AbortableSignal bottom2 = bottom.getSignals().get(1);
top1.signalSuccessfulCompletion();
bottom1.signalAborted();
bottom2.signalSuccessfulCompletion();
assertFalse(this.signalCompleted);
assertFalse(this.signalFailed);
assertTrue(this.signalAborted);
}
}