blob: 6dcd6bde6b2cd7338204fd605f834dc48ee8ccb1 [file] [log] [blame]
/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.inject.persist.jpa;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.PersistService;
import com.google.inject.persist.UnitOfWork;
import junit.framework.TestCase;
import org.hibernate.cfg.Environment;
import org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider;
import org.hsqldb.jdbc.JDBCDataSource;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceException;
import javax.sql.DataSource;
public class EnsureJpaCanTakeObjectsInPropertiesTest extends TestCase {
private Injector injector;
public static class DBModule extends AbstractModule {
final DataSource ds;
final boolean passDataSource;
DBModule(DataSource ds, boolean passDataSource) {
this.ds = ds;
this.passDataSource = passDataSource;
}
@Override
protected void configure() {
Map<String, Object> p = new HashMap<String, Object>();
p.put(Environment.CONNECTION_PROVIDER, InjectedDataSourceConnectionProvider.class.getName());
if (passDataSource) {
p.put(Environment.DATASOURCE, ds);
}
JpaPersistModule jpaPersistModule = new JpaPersistModule("testProperties").properties(p);
install(jpaPersistModule);
}
}
@Override
public void setUp() {
injector = null;
}
@Override
public final void tearDown() {
if (injector == null) {
return;
}
injector.getInstance(UnitOfWork.class).end();
injector.getInstance(EntityManagerFactory.class).close();
}
private static DataSource getDataSource() {
final JDBCDataSource dataSource = new JDBCDataSource();
dataSource.setDatabase("jdbc:hsqldb:mem:persistence");
dataSource.setUser("sa");
dataSource.setPassword("");
return dataSource;
}
private void startPersistService(boolean passDataSource) {
final DataSource dataSource = getDataSource();
injector = Guice.createInjector(new DBModule(dataSource, passDataSource));
//startup persistence
injector.getInstance(PersistService.class).start();
}
public void testWorksIfPassDataSource() {
startPersistService(true);
}
public void testFailsIfNoDataSource() {
try {
startPersistService(false);
fail();
} catch (PersistenceException ex) {
// Expected
injector = null;
}
}
}