/*
* #%L
* Wisdom-Framework
* %%
* Copyright (C) 2013 - 2014 Wisdom Framework
* %%
* 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.
* #L%
*/
package org.wisdom.database.jdbc.it;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.wisdom.database.jdbc.Statements;
import org.wisdom.database.jdbc.service.DataSources;
import org.wisdom.test.parents.WisdomTest;
import javax.inject.Inject;
import javax.sql.DataSource;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Check the behavior of the data source manager inside Wisdom.
*/
public class DataSourcesIT extends WisdomTest {
@Inject
DataSources sources;
@Before
public void setup() {
File db = new File("target/db");
db.mkdirs();
}
@Test
public void testDerby() throws SQLException, InvalidSyntaxException {
assertThat(sources).isNotNull();
assertThat(sources.getDataSources()).containsKeys("derby");
assertThat(sources.getDataSource("derby")).isNotNull();
sources.getConnection("derby").createStatement().execute(Statements.CREATE_TABLE);
sources.getConnection("derby").createStatement().execute(Statements.INSERT_CARIBOU);
sources.getConnection("derby").createStatement().execute(Statements.INSERT_DENVER);
sources.getConnection("derby").createStatement().execute(Statements.INSERT_PHOENIX);
ResultSet results = sources.getConnection("derby").createStatement().executeQuery(Statements.SELECT_WITH_LAT);
assertThat(results).isNotNull();
// We have only one result (CARIBOU)
results.next();
assertThat(results.getString(2).trim()).isEqualTo("Caribou");
results.close();
// Check the Data Source service
Collection<ServiceReference<DataSource>> refs = context.getServiceReferences(DataSource.class,
"(datasource.name=derby)");
assertThat(refs).isNotNull().isNotEmpty().hasSize(1);
}
@Test
public void testH2Memory() throws SQLException, InvalidSyntaxException {
assertThat(sources).isNotNull();
assertThat(sources.getDataSources()).containsKeys("h2mem");
assertThat(sources.getDataSource("h2mem")).isNotNull();
sources.getConnection("h2mem").createStatement().execute(Statements.CREATE_TABLE);
sources.getConnection("h2mem").createStatement().execute(Statements.INSERT_CARIBOU);
sources.getConnection("h2mem").createStatement().execute(Statements.INSERT_DENVER);
sources.getConnection("h2mem").createStatement().execute(Statements.INSERT_PHOENIX);
ResultSet results = sources.getConnection("h2mem").createStatement().executeQuery(Statements.SELECT_WITH_LAT);
assertThat(results).isNotNull();
// We have only one result (CARIBOU)
results.next();
assertThat(results.getString(2).trim()).isEqualTo("Caribou");
results.close();
// Check the Data Source service
Collection<ServiceReference<DataSource>> refs = context.getServiceReferences(DataSource.class,
"(datasource.name=h2mem)");
assertThat(refs).isNotNull().isNotEmpty().hasSize(1);
}
@Test
public void testH2File() throws SQLException, InvalidSyntaxException {
assertThat(sources).isNotNull();
assertThat(sources.getDataSources()).containsKeys("h2file");
assertThat(sources.getDataSource("h2file")).isNotNull();
sources.getConnection("h2file").createStatement().execute(Statements.CREATE_TABLE);
sources.getConnection("h2file").createStatement().execute(Statements.INSERT_CARIBOU);
sources.getConnection("h2file").createStatement().execute(Statements.INSERT_DENVER);
sources.getConnection("h2file").createStatement().execute(Statements.INSERT_PHOENIX);
ResultSet results = sources.getConnection("h2file").createStatement().executeQuery(Statements.SELECT_WITH_LAT);
assertThat(results).isNotNull();
// We have only one result (CARIBOU)
results.next();
assertThat(results.getString(2).trim()).isEqualTo("Caribou");
results.close();
// Check the Data Source service
Collection<ServiceReference<DataSource>> refs = context.getServiceReferences(DataSource.class,
"(datasource.name=h2file)");
assertThat(refs).isNotNull().isNotEmpty().hasSize(1);
}
@Test
public void testHSQLMem() throws SQLException, InvalidSyntaxException {
assertThat(sources).isNotNull();
String database = "hsqlmem";
assertThat(sources.getDataSources()).containsKeys(database);
assertThat(sources.getDataSource(database)).isNotNull();
sources.getConnection(database).createStatement().execute(Statements.CREATE_TABLE);
sources.getConnection(database).createStatement().execute(Statements.INSERT_CARIBOU);
sources.getConnection(database).createStatement().execute(Statements.INSERT_DENVER);
sources.getConnection(database).createStatement().execute(Statements.INSERT_PHOENIX);
ResultSet results = sources.getConnection(database).createStatement().executeQuery(Statements.SELECT_WITH_LAT);
assertThat(results).isNotNull();
// We have only one result (CARIBOU)
results.next();
assertThat(results.getString(2).trim()).isEqualTo("Caribou");
results.close();
// Check the Data Source service
Collection<ServiceReference<DataSource>> refs = context.getServiceReferences(DataSource.class,
"(datasource.name=" + database + ")");
assertThat(refs).isNotNull().isNotEmpty().hasSize(1);
}
@Test
public void testHSQLFile() throws SQLException, InvalidSyntaxException {
assertThat(sources).isNotNull();
assertThat(sources.getDataSources()).containsKeys("hsqlfile");
assertThat(sources.getDataSource("hsqlfile")).isNotNull();
sources.getConnection("hsqlfile").createStatement().execute(Statements.CREATE_TABLE);
sources.getConnection("hsqlfile").createStatement().execute(Statements.INSERT_CARIBOU);
sources.getConnection("hsqlfile").createStatement().execute(Statements.INSERT_DENVER);
sources.getConnection("hsqlfile").createStatement().execute(Statements.INSERT_PHOENIX);
ResultSet results = sources.getConnection("hsqlfile").createStatement().executeQuery(Statements.SELECT_WITH_LAT);
assertThat(results).isNotNull();
// We have only one result (CARIBOU)
results.next();
assertThat(results.getString(2).trim()).isEqualTo("Caribou");
results.close();
// Check the Data Source service
Collection<ServiceReference<DataSource>> refs = context.getServiceReferences(DataSource.class,
"(datasource.name=hsqlfile)");
assertThat(refs).isNotNull().isNotEmpty().hasSize(1);
}
@Test
public void testSQLite() throws SQLException, InvalidSyntaxException {
assertThat(sources).isNotNull();
String database = "sqlite";
assertThat(sources.getDataSources()).containsKeys(database);
assertThat(sources.getDataSource(database)).isNotNull();
sources.getConnection(database).createStatement().execute(Statements.CREATE_TABLE);
sources.getConnection(database).createStatement().execute(Statements.INSERT_CARIBOU);
sources.getConnection(database).createStatement().execute(Statements.INSERT_DENVER);
sources.getConnection(database).createStatement().execute(Statements.INSERT_PHOENIX);
ResultSet results = sources.getConnection(database).createStatement().executeQuery(Statements.SELECT_WITH_LAT);
assertThat(results).isNotNull();
// We have only one result (CARIBOU)
results.next();
assertThat(results.getString(2).trim()).isEqualTo("Caribou");
results.close();
// Check the Data Source service
Collection<ServiceReference<DataSource>> refs = context.getServiceReferences(DataSource.class,
"(datasource.name=" + database + ")");
assertThat(refs).isNotNull().isNotEmpty().hasSize(1);
}
}