package org.zstack.test.core.defer; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.zstack.core.defer.Defer; import org.zstack.core.defer.Deferred; import org.zstack.header.exception.CloudRuntimeException; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; public class TestDefer2 { CLogger logger = Utils.getLogger(TestDefer2.class); int count = 0; boolean ret1 = false; boolean ret2 = false; boolean ret3 = false; boolean ret4 = false; boolean ret5 = false; @Before public void setUp() throws Exception { } @Deferred private void case2() { ret2 = true; } @Deferred private void case3() { ret3 = true; Defer.guard(new Runnable() { @Override public void run() { ret3 = false; } }); } @Deferred private void case4() { ret4 = true; case5(); } @Deferred private void case5() { ret5 = true; Defer.guard(new Runnable() { @Override public void run() { ret5 = false; } }); throw new CloudRuntimeException("Roll back count"); } @Deferred private void case1() { ret1 = true; Defer.guard(new Runnable() { @Override public void run() { ret1 = false; } }); case2(); case3(); case4(); } @Test(expected = CloudRuntimeException.class) public void test() { case1(); Assert.assertFalse(ret1); Assert.assertTrue(ret2); Assert.assertTrue(ret3); Assert.assertTrue(ret4); Assert.assertFalse(ret5); } }