package com.orientechnologies.orient.core.db.document;
import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal;
import com.orientechnologies.orient.core.db.OPartitionedDatabasePool;
import com.orientechnologies.orient.core.exception.ODatabaseException;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import org.testng.annotations.Test;
import java.util.concurrent.*;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
public class ODatabaseDocumentPoolOpenCloseTest {
@Test
public void openCloseClearThreadLocal() {
String url = "memory:" + ODatabaseDocumentPoolOpenCloseTest.class.getSimpleName();
ODatabaseDocument dbo = new ODatabaseDocumentTx(url).create();
OPartitionedDatabasePool pool = new OPartitionedDatabasePool(url, "admin", "admin");
try {
ODatabaseDocument db = pool.acquire();
db.close();
assertNull(ODatabaseRecordThreadLocal.INSTANCE.getIfDefined());
} finally {
pool.close();
dbo.activateOnCurrentThread();
dbo.drop();
}
}
@Test(expectedExceptions = ODatabaseException.class)
public void failureOpenPoolDatabase() {
String url = "memory:" + ODatabaseDocumentPoolOpenCloseTest.class.getSimpleName();
ODatabaseDocument dbo = new ODatabaseDocumentTx(url).create();
OPartitionedDatabasePool pool = new OPartitionedDatabasePool(url, "admin", "admin");
try {
ODatabaseDocument db = pool.acquire();
db.open("admin", "admin");
} finally {
pool.close();
dbo.activateOnCurrentThread();
dbo.drop();
}
}
@Test
public void checkSchemaRefresh() throws ExecutionException, InterruptedException {
String url = "memory:" + ODatabaseDocumentPoolOpenCloseTest.class.getSimpleName();
ODatabaseDocument dbo = new ODatabaseDocumentTx(url).create();
final OPartitionedDatabasePool pool = new OPartitionedDatabasePool(url, "admin", "admin");
try {
ODatabaseDocument db = pool.acquire();
ExecutorService exec = Executors.newSingleThreadExecutor();
Future f = exec.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
ODatabaseDocument db1 = pool.acquire();
db1.getMetadata().getSchema().createClass("Test");
db1.close();
return null;
}
});
f.get();
exec.shutdown();
db.activateOnCurrentThread();
OClass clazz = db.getMetadata().getSchema().getClass("Test");
assertNotNull(clazz);
db.close();
} finally {
pool.close();
dbo.activateOnCurrentThread();
dbo.drop();
}
}
}