package org.openntf.domino.xsp.junit.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Vector; import lotus.domino.NotesException; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.openntf.domino.Database; import org.openntf.domino.Document; import org.openntf.domino.DocumentCollection; import org.openntf.domino.DxlExporter; import org.openntf.domino.DxlImporter; import org.openntf.domino.Form; import org.openntf.domino.Session; import org.openntf.domino.View; import org.openntf.domino.exceptions.BackendBridgeSanityCheckException; import org.openntf.domino.junit.SessionDb; import org.openntf.domino.utils.DominoUtils; import org.openntf.domino.utils.Factory; import org.openntf.domino.utils.Factory.SessionType; import org.openntf.domino.xsp.junit.ModuleJUnitRunner; import org.openntf.junit4xpages.OsgiTest; import com.ibm.domino.napi.c.BackendBridge; import com.ibm.domino.napi.c.NotesUtil; import com.ibm.domino.napi.c.Os; import com.ibm.domino.xsp.module.nsf.NSFComponentModule; @OsgiTest @SessionDb("log.nsf") @RunWith(ModuleJUnitRunner.class) public class BackendBridgeTest { public static void dummy4JUnit() throws Exception { assertFalse(false); assertTrue(true); assertEquals(1, 1); assertNull(null); assertNotNull(Boolean.TRUE); fail("???"); } @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { DominoUtils.setBubbleExceptions(true); } @After public void tearDown() throws Exception { } /*-------------------------------------------------------------------------*/ @Test public void testGetDatabaseHandleRO() { System.out.println("Test: getDatabaseHandleRO"); Database odaDB = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); long hOdaDB = BackendBridge.getDatabaseHandleRO(odaDB); System.out.println(" HDB-RO=" + hOdaDB); } @Test public void testGetDocumentHandleRW() { System.out.println("Test: getDocumentHandleRW"); Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); DocumentCollection dc = db.getAllDocuments(); int sz = dc.size(); System.out.println(" getAllDocuments=" + sz); if (sz == 0) return; int i = sz >>> 1; Document found = null; for (Document doc : dc) if (i-- == 0) { found = doc; break; } long hDoc = BackendBridge.getDocumentHandleRW(found); System.out.println(" HDoc-RW=" + hDoc); } @Test public void testDetachDatabaseHandle() { System.out.println("Test: detachDatabaseHandle"); Database odaDB = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); long hOdaDB = BackendBridge.getDatabaseHandleRO(odaDB); System.out.println(" HDB-RO=" + hOdaDB); hOdaDB = BackendBridge.detachDatabaseHandle(odaDB); System.out.println(" detachDatabaseHandle=" + hOdaDB); } @Test public void testDetachDocumentHandle() { System.out.println("Test: detachDocumentHandle"); Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); DocumentCollection dc = db.getAllDocuments(); int sz = dc.size(); System.out.println(" getAllDocuments=" + sz); if (sz == 0) return; int i = sz >>> 1; Document found = null; for (Document doc : dc) if (i-- == 0) { found = doc; break; } long hDoc = BackendBridge.getDocumentHandleRW(found); System.out.println(" HDoc-RW=" + hDoc); hDoc = BackendBridge.detachDocumentHandle(found); System.out.println(" detachDocumentHandle=" + hDoc); } @Test public void testCreateDatabase() throws NotesException { System.out.println("Test: createDatabase"); Session sess = Factory.getSession(SessionType.CURRENT); lotus.domino.Database db = BackendBridge.createDatabase(sess, 1); System.out.println(" createDatabase: " + db); } @Test public void testCreateDocument() { System.out.println("Test: createDocument"); Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); lotus.domino.Document doc = BackendBridge.createDocument(db, 1); System.out.println(" createDocument: " + doc); } @Test public void testDxlExporterSetExtendedOptions() { System.out.println("Test: dxlExporterSetExtendedOptions"); Session sess = Factory.getSession(SessionType.CURRENT); DxlExporter dxlExp = sess.createDxlExporter(); BackendBridge.dxlExporterSetExtendedOptions(dxlExp, 4); System.out.println(" Set to 4"); } @Test public void testDxlImporterSetExtendedOptions() { System.out.println("Test: dxlImporterSetExtendedOptions"); Session sess = Factory.getSession(SessionType.CURRENT); DxlImporter dxlImp = sess.createDxlImporter(); BackendBridge.dxlImporterSetExtendedOptions(dxlImp, 2, "OpenNTF"); System.out.println(" Set to 2/OpenNTF"); } @Test public void testSetContextDatabaseContext2() throws NotesException { System.out.println("Test: setContextDatabaseContext2"); Session sess = Factory.getSession(SessionType.CURRENT); long hOdaDB = BackendBridge.getDatabaseHandleRO(sess.getCurrentDatabase()); System.out.println(" HDB-RO=" + hOdaDB); /* * Again, it is necessary to pass a Lotus Session as 1st parameter, otherwise you run into a NullPointerException */ NSFComponentModule.XPagesDatabase xdb = (NSFComponentModule.XPagesDatabase) BackendBridge.setContextDatabaseContext2(sess .getFactory().toLotus(sess), hOdaDB, NSFComponentModule.XPagesDatabase.class); System.out.println(" setContextDatabaseContext2=" + xdb); } @Test public void testComputeWithForm() throws NotesException { System.out.println("Test: computeWithForm"); Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); DocumentCollection dc = db.getAllDocuments(); int sz = dc.size(); System.out.println(" getAllDocuments=" + sz); if (sz == 0) return; int i = sz >>> 1; Document found = null; for (Document doc : dc) if (i-- == 0) { found = doc; break; } boolean res = BackendBridge.computeWithForm(found, true, true); System.out.println(" Result=" + res); } @Test public void testComputeWithFormExt() throws NotesException { System.out.println("Test: computeWithFormExt"); Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); DocumentCollection dc = db.getAllDocuments(); int sz = dc.size(); System.out.println(" getAllDocuments=" + sz); if (sz == 0) return; int i = sz >>> 2; Document found = null; for (Document doc : dc) if (i-- == 0) { found = doc; break; } Form f = db.getForm("Events"); System.out.println(" Found Form for 'Events': " + f); boolean res = BackendBridge.computeWithFormExt(found, f, true, true); System.out.println(" Result=" + res); } @Test public void testPassThroughSecurityErrors() { System.out.println("Test: passThroughSecurityErrors"); Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase(); BackendBridge.passThroughSecurityErrors(db, true); System.out.println(" Done."); } @Test public void testGetViewEntryByKeyWithOptions() throws NotesException { Session sess = Factory.getSession(SessionType.CURRENT); Database db = sess.getCurrentDatabase(); Vector<View> views = db.getViews(); View dummyView = views.get(0); try { BackendBridge.getViewEntryByKeyWithOptions(dummyView, null, 42); fail("BackendBridge.getViewEntryByKeyWithOptions did not throw expected exceptions"); } catch (BackendBridgeSanityCheckException allGood) { } Vector<String> key = new Vector<String>(); key.add("a"); Object e = BackendBridge.getViewEntryByKeyWithOptions(dummyView, key, 2243); assertTrue(e instanceof org.openntf.domino.ViewEntry); } @Test public void testSetNoRecycle() { System.out.println("Test: setNoRecyle"); Session sess = Factory.getSession(SessionType.CURRENT); Database db = sess.getCurrentDatabase(); DocumentCollection dc = db.getAllDocuments(); int sz = dc.size(); System.out.println(" getAllDocuments=" + sz); if (sz == 0) return; int i = sz >>> 3; Document found = null; for (Document doc : dc) if (i-- == 0) { found = doc; break; } BackendBridge.setNoRecycle(sess, found, true); System.out.println(" Done."); } @Test public void testForceRecycle() { System.out.println("Test: forceRecyle"); Session sess = Factory.getSession(SessionType.CURRENT); Database db = sess.getCurrentDatabase(); DocumentCollection dc = db.getAllDocuments(); int sz = dc.size(); System.out.println(" getAllDocuments=" + sz); if (sz == 0) return; int i = sz >>> 4; Document found = null; for (Document doc : dc) if (i-- == 0) { found = doc; break; } BackendBridge.forceRecycle(sess, found); System.out.println(" Done."); } @SuppressWarnings("unused") @Test(expected = UnsatisfiedLinkError.class) public void testCreateXPageSession() throws Throwable { String userName = Factory.getLocalServerName(); final long userHandle = NotesUtil.createUserNameList(userName); try { lotus.domino.Session xs = BackendBridge.createXPageSession(userName, userHandle, true, true, true, false); } finally { Os.OSMemFree(userHandle); } } }