/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.repository.hibernate.internal; import java.util.Properties; import junit.framework.TestCase; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipsetrader.core.Script; import org.eclipsetrader.core.ats.IScriptStrategy; import org.eclipsetrader.core.feed.FeedIdentifier; import org.eclipsetrader.core.feed.IFeedIdentifier; import org.eclipsetrader.core.instruments.ISecurity; import org.eclipsetrader.core.instruments.Security; import org.eclipsetrader.core.repositories.IPropertyConstants; import org.eclipsetrader.core.repositories.IRepositoryRunnable; import org.eclipsetrader.core.repositories.IStore; import org.eclipsetrader.core.repositories.StoreProperties; import org.eclipsetrader.core.views.Column; import org.eclipsetrader.core.views.Holding; import org.eclipsetrader.core.views.IColumn; import org.eclipsetrader.core.views.IHolding; import org.eclipsetrader.core.views.IWatchList; import org.eclipsetrader.repository.hibernate.HibernateRepository; import org.eclipsetrader.repository.hibernate.internal.stores.ScriptStore; import org.eclipsetrader.repository.hibernate.internal.stores.SecurityStore; import org.eclipsetrader.repository.hibernate.internal.stores.StrategyScriptStore; import org.eclipsetrader.repository.hibernate.internal.stores.WatchListStore; import org.eclipsetrader.repository.hibernate.internal.types.IdentifierType; import org.hibernate.Transaction; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class HibernateRepositoryTest extends TestCase { private HibernateRepository repository; /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { buildRepositoryInstance(); } private void buildRepositoryInstance() { Properties properties = new Properties(); properties.put("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver"); properties.put("hibernate.connection.url", "jdbc:hsqldb:mem:testdb"); properties.put("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); properties.put("hibernate.hbm2ddl.auto", "create-drop"); properties.put("hibernate.cache.provider_class", "org.hibernate.cache.HashtableCacheProvider"); repository = new HibernateRepository("tests", "Tests Repository", properties) { @Override protected AnnotationConfiguration buildConfiguration() { AnnotationConfiguration cfg = super.buildConfiguration(); new SchemaExport(cfg).create(true, true); return cfg; } /* (non-Javadoc) * @see org.eclipsetrader.repository.hibernate.HibernateRepository#startUp(org.eclipse.core.runtime.IProgressMonitor) */ @Override public void startUp(IProgressMonitor monitor) { super.startUp(monitor); super.initializeWatchListsCollections(); } @Override public IStatus runInRepository(IRepositoryRunnable runnable, ISchedulingRule rule, IProgressMonitor monitor) { Transaction transaction = getSession().beginTransaction(); try { runnable.run(monitor); transaction.commit(); } catch (Exception e) { try { transaction.rollback(); } catch (Exception e1) { } throw new RuntimeException(e); } return Status.OK_STATUS; } }; repository.startUp(null); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ @Override protected void tearDown() throws Exception { repository.shutDown(null); } public void testCreateSecurity() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { createSecurity("Microsoft Corp.", null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(0, repository.getSession().createCriteria(IdentifierType.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); } public void testCreateSecurityWithIdentifier() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { createSecurity("Microsoft Corp.", new FeedIdentifier("MSFT", null)); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(1, repository.getSession().createCriteria(IdentifierType.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); } public void testDeleteSecurity() throws Exception { final IStore repositoryStore = repository.createObject(); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, ISecurity.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Microsoft Corp."); storeProperties.setProperty(IPropertyConstants.IDENTIFIER, new FeedIdentifier("MSFT", null)); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(1, repository.getSession().createCriteria(IdentifierType.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { repositoryStore.delete(monitor); return Status.OK_STATUS; } }, null); assertEquals(0, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(1, repository.getSession().createCriteria(IdentifierType.class).list().size()); assertEquals(0, repository.fetchObjects(null).length); } public void testCreateWatchList() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IWatchList.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Sample"); IStore repositoryStore = repository.createObject(); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); } public void testCreateWatchListWithColumns() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IWatchList.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Sample"); storeProperties.setProperty(IPropertyConstants.COLUMNS, new IColumn[] { new Column("C1", null), new Column("C2", null), }); IStore repositoryStore = repository.createObject(); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); } public void testCreateWatchListWithSecurities() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { IStore store = createSecurity("Microsoft Corp.", new FeedIdentifier("MSFT", null)); Security security1 = new Security(store, store.fetchProperties(monitor)); store = createSecurity("Google", new FeedIdentifier("GOOG", null)); Security security2 = new Security(store, store.fetchProperties(monitor)); StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IWatchList.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Sample"); storeProperties.setProperty(IPropertyConstants.HOLDINGS, new IHolding[] { new Holding(security1), new Holding(security2), }); IStore repositoryStore = repository.createObject(); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(2, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(1, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(3, repository.fetchObjects(null).length); } public void testDeleteWatchList() throws Exception { final IStore repositoryStore = repository.createObject(); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IWatchList.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Sample"); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { repositoryStore.delete(monitor); return Status.OK_STATUS; } }, null); assertEquals(0, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(0, repository.fetchObjects(null).length); } public void testDeleteWatchListWithSecurities() throws Exception { final IStore repositoryStore = repository.createObject(); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { IStore store = createSecurity("Microsoft Corp.", new FeedIdentifier("MSFT", null)); Security security1 = new Security(store, store.fetchProperties(monitor)); store = createSecurity("Google", new FeedIdentifier("GOOG", null)); Security security2 = new Security(store, store.fetchProperties(monitor)); StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IWatchList.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Sample"); storeProperties.setProperty(IPropertyConstants.HOLDINGS, new IHolding[] { new Holding(security1), new Holding(security2), }); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(2, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(1, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(3, repository.fetchObjects(null).length); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { repositoryStore.delete(monitor); return Status.OK_STATUS; } }, null); assertEquals(2, repository.getSession().createCriteria(SecurityStore.class).list().size()); assertEquals(0, repository.getSession().createCriteria(WatchListStore.class).list().size()); assertEquals(2, repository.fetchObjects(null).length); } public void testCreateScript() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, Script.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Test"); IStore repositoryStore = repository.createObject(); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(ScriptStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); } public void testDeleteScript() throws Exception { final IStore repositoryStore = repository.createObject(); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, Script.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, "Test"); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(ScriptStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { repositoryStore.delete(monitor); return Status.OK_STATUS; } }, null); assertEquals(0, repository.getSession().createCriteria(ScriptStore.class).list().size()); assertEquals(0, repository.fetchObjects(null).length); } public void testCreateScriptStrategy() throws Exception { repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IScriptStrategy.class.getName()); storeProperties.setProperty(IScriptStrategy.PROP_NAME, "Test"); IStore repositoryStore = repository.createObject(); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(StrategyScriptStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); } public void testDeleteScriptStrategy() throws Exception { final IStore repositoryStore = repository.createObject(); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IScriptStrategy.class.getName()); storeProperties.setProperty(IScriptStrategy.PROP_NAME, "Test"); repositoryStore.putProperties(storeProperties, null); return Status.OK_STATUS; } }, null); assertEquals(1, repository.getSession().createCriteria(StrategyScriptStore.class).list().size()); assertEquals(1, repository.fetchObjects(null).length); repository.runInRepository(new IRepositoryRunnable() { @Override public IStatus run(IProgressMonitor monitor) throws Exception { repositoryStore.delete(monitor); return Status.OK_STATUS; } }, null); assertEquals(0, repository.getSession().createCriteria(StrategyScriptStore.class).list().size()); assertEquals(0, repository.fetchObjects(null).length); } private IStore createSecurity(String name, IFeedIdentifier identifier) { StoreProperties storeProperties = new StoreProperties(); storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, ISecurity.class.getName()); storeProperties.setProperty(IPropertyConstants.NAME, name); storeProperties.setProperty(IPropertyConstants.IDENTIFIER, identifier); IStore repositoryStore = repository.createObject(); repositoryStore.putProperties(storeProperties, null); return repositoryStore; } }