buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestORMFMPPLoader.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/java/metadata/tests/src/com/nokia/helium/metadata/tests/TestORMFMPPLoader.java Fri Aug 13 14:59:05 2010 +0300
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+package com.nokia.helium.metadata.tests;
+
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.nokia.helium.metadata.FactoryManager;
+import com.nokia.helium.metadata.MetadataException;
+import com.nokia.helium.metadata.fmpp.ORMQueryModeModel;
+import com.nokia.helium.metadata.model.metadata.LogFile;
+
+import fmpp.ProgressListener;
+import freemarker.ext.beans.BeanModel;
+import freemarker.template.SimpleScalar;
+import freemarker.template.TemplateCollectionModel;
+import freemarker.template.TemplateHashModel;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelIterator;
+import freemarker.template.TemplateSequenceModel;
+
+/**
+ * Testing the ORMFMPPLoader loader.
+ *
+ */
+public class TestORMFMPPLoader {
+ private File database;
+ private static Logger log = Logger.getLogger(TestORMFMPPLoader.class);
+
+ /**
+ * Populates the LogFile table with basic data.
+ * @throws MetadataException
+ * @throws IOException
+ */
+ @Before
+ public void populateDatabase() throws MetadataException, IOException {
+ File tempdir = new File(System.getProperty("test.temp.dir"));
+ tempdir.mkdirs();
+ database = new File(tempdir, "test_db");
+ if (database.exists()) {
+ FileUtils.forceDelete(database);
+ }
+ EntityManagerFactory factory = FactoryManager.getFactoryManager().getEntityManagerFactory(database);
+ EntityManager em = factory.createEntityManager();
+ try {
+ em.getTransaction().begin();
+ for (int i = 0 ; i < 2000 ; i++) {
+ LogFile lf = new LogFile();
+ lf.setPath("log" + String.format("%04d", i));
+ em.persist(lf);
+ }
+ } finally {
+ if (em.getTransaction().isActive()) {
+ em.getTransaction().commit();
+ }
+ em.close();
+ factory.close();
+ }
+ }
+
+ /**
+ * Delete the database after test completion.
+ * @throws IOException
+ */
+ @After
+ public void cleanupDatabase() throws IOException {
+ FileUtils.forceDelete(database);
+ }
+
+ /**
+ * Run a JPA query.
+ * @throws Exception
+ */
+ @Test
+ public void testJpaSingleQuery() throws Exception {
+ ORMQueryModeModel modeModel = new ORMQueryModeModel(database);
+ try {
+ TemplateHashModel model = modeModel.get("jpasingle");
+ TemplateModel data = model.get("select l from LogFile l order by l.path");
+ Assert.assertTrue(data instanceof TemplateSequenceModel);
+ TemplateSequenceModel seq = (TemplateSequenceModel)data;
+ Assert.assertTrue(seq.size() == 2000);
+
+ // Let's make sure we get null if out of bounds
+ Assert.assertNotNull(seq.get(0));
+ Assert.assertNotNull(seq.get(750));
+ Assert.assertNotNull(seq.get(749));
+ Assert.assertNotNull(seq.get(1999));
+ Assert.assertNotNull(seq.get(0));
+ Assert.assertNull(seq.get(2000));
+ Assert.assertNull(seq.get(2001));
+ Assert.assertNull(seq.get(2000));
+
+ // Check index 0
+ LogFile lf = (LogFile)((BeanModel)seq.get(0)).getWrappedObject();
+ log.info("seq.get(0): " + lf.getPath());
+ Assert.assertTrue("log0000".equals(lf.getPath()));
+
+ // Check index 999
+ lf = (LogFile)((BeanModel)seq.get(999)).getWrappedObject();
+ log.info("seq.get(999): " + lf.getPath());
+ Assert.assertTrue("log0999".equals(lf.getPath()));
+
+ // Check index 1999
+ lf = (LogFile)((BeanModel)seq.get(1999)).getWrappedObject();
+ log.info("seq.get(1999): " + lf.getPath());
+ Assert.assertTrue("log1999".equals(lf.getPath()));
+ } finally {
+ modeModel.notifyProgressEvent(null, ProgressListener.EVENT_END_PROCESSING_SESSION, null, 0, null, null);
+ }
+ }
+
+ /**
+ * Run a native query.
+ * @throws Exception
+ */
+ @Test
+ public void testNativeStringQuery() throws Exception {
+ ORMQueryModeModel modeModel = new ORMQueryModeModel(database);
+ try {
+ TemplateHashModel model = modeModel.get("native:java.lang.String");
+ TemplateModel data = model.get("select l.path from LogFile l order by l.path");
+ Assert.assertTrue(data instanceof TemplateCollectionModel);
+ TemplateCollectionModel collection = (TemplateCollectionModel)data;
+ TemplateModelIterator iterator = collection.iterator();
+
+ int i = 0;
+ while (iterator.hasNext()) {
+ TemplateModel next = iterator.next();
+ SimpleScalar scalar = (SimpleScalar)next;
+ Assert.assertTrue(scalar.getAsString().equals("log" + String.format("%04d", i++)));
+ }
+ Assert.assertFalse(iterator.hasNext());
+ Assert.assertNull(iterator.next());
+ } finally {
+ modeModel.notifyProgressEvent(null, ProgressListener.EVENT_END_PROCESSING_SESSION, null, 0, null, null);
+ }
+ }
+}