package org.zstack.test.core.rest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.zstack.core.componentloader.ComponentLoader;
import org.zstack.header.errorcode.ErrorCode;
import org.zstack.header.errorcode.SysErrors;
import org.zstack.header.rest.JsonAsyncRESTCallback;
import org.zstack.header.rest.RESTFacade;
import org.zstack.test.WebBeanConstructor;
import org.zstack.utils.Utils;
import org.zstack.utils.logging.CLogger;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class TestRestAsyncCallbackTimeout {
CLogger logger = Utils.getLogger(TestRestAsyncCallbackTimeout.class);
WebBeanConstructor wbean;
ComponentLoader loader;
RESTFacade restf;
String url;
CountDownLatch latch = new CountDownLatch(1);
boolean success = false;
@Before
public void setUp() throws Exception {
wbean = new WebBeanConstructor();
wbean.addXml("PortalForUnitTest.xml").addXml("AccountManager.xml");
loader = wbean.build();
restf = loader.getComponent(RESTFacade.class);
url = wbean.getSiteUrl();
}
@Test
public void test() throws InterruptedException {
String url = wbean.buildUrl(RESTBeanForTest.ROOT, RESTBeanForTest.CALLBACK_TIMEOUT_PATH);
final String hi = "hello";
restf.asyncJsonPost(url, hi, new JsonAsyncRESTCallback<String>(null) {
@Override
public void fail(ErrorCode err) {
logger.error(String.format("fail: %s", err));
success = false;
if (SysErrors.TIMEOUT.toString().equals(err.getCode())) {
success = true;
}
latch.countDown();
}
@Override
public void success(String ret) {
logger.error(String.format("received %s that should be received", ret));
success = false;
latch.countDown();
}
@Override
public Class<String> getReturnClass() {
return String.class;
}
}, TimeUnit.SECONDS, 5);
latch.await(1, TimeUnit.MINUTES);
Assert.assertTrue(success);
}
}