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 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.Item;
import org.openntf.domino.Session;
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.NException;
import com.ibm.domino.napi.c.NotesUtil;
import com.ibm.domino.napi.c.Os;
import com.ibm.domino.napi.c.xsp.XSPNative;
@OsgiTest
@SessionDb("log.nsf")
@RunWith(ModuleJUnitRunner.class)
public class XSPNativeTest {
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 testGetDBHandle() throws NotesException {
Database odaDB = Factory.getSession(SessionType.CURRENT).getCurrentDatabase();
long hOdaDB = XSPNative.getDBHandle(odaDB);
System.out.println("HND: " + hOdaDB);
assertTrue(hOdaDB > 0);
}
@Test
public void testSetContextDatabase() throws NotesException {
Database odaDB = Factory.getSession(SessionType.CURRENT).getCurrentDatabase();
long hOdaDB = XSPNative.getDBHandle(odaDB);
Session sess = Factory.getSession(SessionType.NATIVE);
assertNull(sess.getCurrentDatabase());
System.out.println("HND2=" + hOdaDB);
/*
* Has to be called with a Lotus Session object, since internally the Session is treated as a lotus.domino.local.Session
*/
lotus.domino.Database db = XSPNative.setContextDatabase(sess.getFactory().toLotus(sess), hOdaDB);
assertEquals(db.getFileName(), "log.nsf");
assertNotNull(sess.getCurrentDatabase());
assertEquals(sess.getCurrentDatabase().getFileName(), "log.nsf");
}
@Test
public void testCreateXPageSession() throws NException, NotesException {
String userName = Factory.getLocalServerName();
final long userHandle = NotesUtil.createUserNameList(userName);
try {
lotus.domino.Session xs = XSPNative.createXPageSession(userName, userHandle, false, true);
assertEquals(userName, xs.getEffectiveUserName());
xs.recycle();
} finally {
Os.OSMemFree(userHandle);
}
}
@Test
public void testCreateXPageSessionExt() throws NotesException, NException {
String userName = Factory.getLocalServerName();
final long userHandle = NotesUtil.createUserNameList(userName);
try {
lotus.domino.Session xs = XSPNative.createXPageSessionExt(userName, userHandle, false, true, false);
assertEquals(userName, xs.getEffectiveUserName());
xs.recycle();
} finally {
Os.OSMemFree(userHandle);
}
}
@Test
public void testDowngradeXPageRestrictions() throws NotesException {
Session sess = Factory.getSession(SessionType.CURRENT);
System.out.println("Downgrade:" + XSPNative.downgradeXPageRestrictions(sess, sess.getEffectiveUserName(), null, 0L));
}
@Test
public void testSetXPageRestrictions() throws NotesException {
Session sess = Factory.getSession(SessionType.CURRENT);
XSPNative.setXPageRestrictions(sess, null, true);
System.out.println("setXPageRestrictions passed");
}
@Test
public void testIsRestrictedSigner() throws NotesException {
Session sess = Factory.getSession(SessionType.CURRENT);
System.out.println("IsRestrictedSigner:" + XSPNative.isRestrictedSigner(sess, sess.getEffectiveUserName()));
}
@Test
public void testIsDocEditable() throws NotesException {
Database db = Factory.getSession(SessionType.CURRENT).getCurrentDatabase();
DocumentCollection dc = db.getAllDocuments();
System.out.println("getAllDocuments=" + dc.size());
int i = 1;
for (Document doc : dc) {
System.out.println("Doc " + i + " is editable: " + XSPNative.isDocEditable(doc));
if (++i > 10)
break;
}
}
@Test
public void testSetEclHandle() {
Session sess = Factory.getSession(SessionType.CURRENT);
System.out.println("setEclHandle=" + XSPNative.setEclHandle(sess, 512 | 4096));
}
@Test
public void testXpgBEProfiler() throws NotesException {
Session sess = Factory.getSession(SessionType.CURRENT);
XSPNative.startXpgBEProfiler(sess);
testIsDocEditable();
XSPNative.stopXpgBEProfiler(sess);
System.out.println("BEProfiler was run");
Database db = sess.getCurrentDatabase();
Document doc = db.createDocument();
XSPNative.getXpgBEProfilerResults(sess, doc, "XSPNative");
System.out.println("BEProfiler results were fetched:");
for (Item i : doc.getItems())
System.out.println(" " + i.getName() + "=" + i.getValueString());
}
}