package org.zstack.test.aop;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.zstack.core.componentloader.ComponentLoader;
import org.zstack.core.thread.ChainTask;
import org.zstack.core.thread.SyncTaskChain;
import org.zstack.core.thread.ThreadFacade;
import org.zstack.header.core.NoErrorCompletion;
import org.zstack.test.BeanConstructor;
import java.util.concurrent.TimeUnit;
/**
*/
public class TestAsyncBackup7 {
ComponentLoader loader;
ThreadFacade thdf;
String syncName = "test";
boolean success1 = false;
boolean success2 = false;
@Before
public void setUp() throws Exception {
BeanConstructor con = new BeanConstructor();
loader = con.build();
thdf = loader.getComponent(ThreadFacade.class);
}
@Test
public void test() throws InterruptedException {
thdf.chainSubmit(new ChainTask(new NoErrorCompletion() {
@Override
public void done() {
success1 = true;
}
}) {
@Override
public String getSyncSignature() {
return syncName;
}
@Override
public void run(SyncTaskChain chain) {
throw new RuntimeException("on purpose");
}
@Override
public String getName() {
return syncName;
}
});
thdf.chainSubmit(new ChainTask(null) {
@Override
public String getSyncSignature() {
return syncName;
}
@Override
public void run(SyncTaskChain chain) {
success2 = true;
chain.next();
}
@Override
public String getName() {
return syncName;
}
});
TimeUnit.SECONDS.sleep(2);
Assert.assertTrue(success1);
Assert.assertTrue(success2);
}
}