BAEL-7259
This commit is contained in:
parent
43fd0973dd
commit
eac9c4d5e9
|
@ -38,6 +38,11 @@
|
||||||
<artifactId>testcontainers</artifactId>
|
<artifactId>testcontainers</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.derby</groupId>
|
||||||
|
<artifactId>derby</artifactId>
|
||||||
|
<version>10.13.1.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
@ -52,10 +57,4 @@
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<maven.compiler.source>19</maven.compiler.source>
|
|
||||||
<maven.compiler.target>19</maven.compiler.target>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -11,8 +11,10 @@ import org.testcontainers.containers.GenericContainer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
@ -21,11 +23,10 @@ public class HarperDBLiveTest {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTest.class);
|
private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTest.class);
|
||||||
|
|
||||||
private static String host;
|
|
||||||
|
|
||||||
private static Integer port;
|
private static Integer port;
|
||||||
|
|
||||||
private static HarperDBContainer harperDBContainer;
|
private static HarperDBContainer harperDBContainer;
|
||||||
|
|
||||||
private static HarperDBApiService harperDbApiService;
|
private static HarperDBApiService harperDbApiService;
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
|
@ -40,7 +41,6 @@ public class HarperDBLiveTest {
|
||||||
|
|
||||||
GenericContainer genericContainer = harperDBContainer.installHarperDB();
|
GenericContainer genericContainer = harperDBContainer.installHarperDB();
|
||||||
|
|
||||||
host = genericContainer.getHost();
|
|
||||||
genericContainer.start();
|
genericContainer.start();
|
||||||
|
|
||||||
port = genericContainer.getFirstMappedPort();
|
port = genericContainer.getFirstMappedPort();
|
||||||
|
@ -51,7 +51,7 @@ public class HarperDBLiveTest {
|
||||||
harperDbApiService = new HarperDBApiService(url, "admin", "password");
|
harperDbApiService = new HarperDBApiService(url, "admin", "password");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setupDB() throws URISyntaxException, IOException {
|
private static void setupDB() throws IOException {
|
||||||
harperDbApiService.createSchema("Demo");
|
harperDbApiService.createSchema("Demo");
|
||||||
|
|
||||||
harperDbApiService.createTable("Demo", "Subject", "name");
|
harperDbApiService.createTable("Demo", "Subject", "name");
|
||||||
|
@ -99,7 +99,7 @@ public class HarperDBLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void whenConnectionInfoInURL_thenConnectSuccess() throws SQLException {
|
void whenConnectionInfoInURL_thenConnectSuccess() {
|
||||||
assertDoesNotThrow(() -> {
|
assertDoesNotThrow(() -> {
|
||||||
final String JDBC_URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
|
final String JDBC_URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ public class HarperDBLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void whenConnectionInfoInProperties_thenConnectSuccess() throws SQLException {
|
void whenConnectionInfoInProperties_thenConnectSuccess() {
|
||||||
assertDoesNotThrow(() -> {
|
assertDoesNotThrow(() -> {
|
||||||
Properties prop = new Properties();
|
Properties prop = new Properties();
|
||||||
prop.setProperty("Server", "127.0.0.1:" + port);
|
prop.setProperty("Server", "127.0.0.1:" + port);
|
||||||
|
@ -128,7 +128,7 @@ public class HarperDBLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void whenConnectionPooling_thenConnectSuccess() throws SQLException {
|
void whenConnectionPooling_thenConnectSuccess() {
|
||||||
assertDoesNotThrow(() -> {
|
assertDoesNotThrow(() -> {
|
||||||
HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
|
HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
|
||||||
final String JDBC_URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port + ";User=admin;Password=password;";
|
final String JDBC_URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port + ";User=admin;Password=password;";
|
||||||
|
@ -176,6 +176,7 @@ public class HarperDBLiveTest {
|
||||||
assertEquals(2, statement.getUpdateCount());
|
assertEquals(2, statement.getUpdateCount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void givenPrepareStatement_whenAddToBatch_thenSuccess() throws SQLException {
|
void givenPrepareStatement_whenAddToBatch_thenSuccess() throws SQLException {
|
||||||
final String INSERT_SQL = "insert into Demo.Teacher(id, name, joining_date) values"
|
final String INSERT_SQL = "insert into Demo.Teacher(id, name, joining_date) values"
|
||||||
|
@ -199,12 +200,23 @@ public class HarperDBLiveTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static Connection getConnection() throws SQLException {
|
private static Connection getConnection() throws SQLException {
|
||||||
String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
|
String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
|
||||||
return DriverManager.getConnection(URL);
|
return DriverManager.getConnection(URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Connection getConnection(Map<String, String> properties) throws SQLException {
|
||||||
|
Properties prop = new Properties();
|
||||||
|
prop.setProperty("Server", "127.0.0.1:" + port);
|
||||||
|
prop.setProperty("User", "admin");
|
||||||
|
prop.setProperty("Password", "password");
|
||||||
|
for (Map.Entry<String, String> entry : properties.entrySet()) {
|
||||||
|
prop.setProperty(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
return DriverManager.getConnection("jdbc:harperdb:", prop);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
|
void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
|
||||||
final String SQL_QUERY = "select id, name from Demo.Subject where name = 'Maths'";
|
final String SQL_QUERY = "select id, name from Demo.Subject where name = 'Maths'";
|
||||||
|
@ -213,9 +225,9 @@ public class HarperDBLiveTest {
|
||||||
Statement statement = connection.createStatement();
|
Statement statement = connection.createStatement();
|
||||||
ResultSet resultSet = statement.executeQuery(SQL_QUERY);
|
ResultSet resultSet = statement.executeQuery(SQL_QUERY);
|
||||||
while (resultSet.next()) {
|
while (resultSet.next()) {
|
||||||
int id = resultSet.getInt("id");
|
Integer id = resultSet.getInt("id");
|
||||||
String name = resultSet.getString("name");
|
String name = resultSet.getString("name");
|
||||||
assertNotNull(Integer.valueOf(id));
|
assertNotNull(id);
|
||||||
assertEquals("Maths", name);
|
assertEquals("Maths", name);
|
||||||
logger.info("Subject id:" + id + " Subject Name:" + name);
|
logger.info("Subject id:" + id + " Subject Name:" + name);
|
||||||
}
|
}
|
||||||
|
@ -245,25 +257,6 @@ public class HarperDBLiveTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Test
|
|
||||||
void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
|
|
||||||
final String SQL_QUERY = "select id, name from Demo.Subject where name = ?";
|
|
||||||
|
|
||||||
try (Connection connection = getConnection()) {
|
|
||||||
PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
|
|
||||||
preparedStatement.setString(1, "Maths");
|
|
||||||
|
|
||||||
ResultSet resultSet = preparedStatement.executeQuery();
|
|
||||||
while (resultSet.next()) {
|
|
||||||
int id = resultSet.getInt("id");
|
|
||||||
String name = resultSet.getString("name");
|
|
||||||
assertNotNull(Integer.valueOf(id));
|
|
||||||
assertEquals("Maths", name);
|
|
||||||
logger.info("Subject id:" + id + " Subject Name:" + name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
|
void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
|
||||||
|
@ -325,4 +318,62 @@ public class HarperDBLiveTest {
|
||||||
assertEquals(1, preparedStatement.getUpdateCount());
|
assertEquals(1, preparedStatement.getUpdateCount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenTempTable_whenInsertIntoSelectTempTable_thenSuccess() throws SQLException {
|
||||||
|
try (Connection connection = getConnection()) {
|
||||||
|
Statement statement = connection.createStatement();
|
||||||
|
assertDoesNotThrow(() -> {
|
||||||
|
statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
|
||||||
|
+ "values('12', 'David Flinch', '04-04-2014')");
|
||||||
|
statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
|
||||||
|
+ "values('13', 'Stephen Hawkins', '04-07-2017')");
|
||||||
|
statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
|
||||||
|
+ "values('14', 'Albert Einstein', '12-08-2020')");
|
||||||
|
statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
|
||||||
|
+ "values('15', 'Leo Tolstoy', '20-08-2022')");
|
||||||
|
});
|
||||||
|
assertDoesNotThrow(() -> statement.execute("insert into Demo.Teacher(id, name, joining_date) "
|
||||||
|
+ "select id, name, joining_date from Teacher#TEMP"));
|
||||||
|
ResultSet resultSet = statement.executeQuery("select count(id) as rows from Demo.Teacher where id in"
|
||||||
|
+ " (12, 13, 14, 15)");
|
||||||
|
resultSet.next();
|
||||||
|
int totalRows = resultSet.getInt("rows");
|
||||||
|
logger.info("total number of rows fetched:" + totalRows);
|
||||||
|
assertEquals(4, totalRows);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenUserDefinedView_whenQueryView_thenSuccess() throws SQLException {
|
||||||
|
URL url = ClassLoader.getSystemClassLoader().getResource("UserDefinedViews.json");
|
||||||
|
|
||||||
|
String folderPath = url.getPath().substring(0, url.getPath().lastIndexOf('/'));
|
||||||
|
|
||||||
|
try(Connection connection = getConnection(Map.of("Location", folderPath))) {
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement("select teacher_name,subject_name"
|
||||||
|
+ " from UserViews.View_Teacher_Details where subject_name = ?");
|
||||||
|
preparedStatement.setString(1, "Science");
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
while(resultSet.next()) {
|
||||||
|
assertEquals("Science", resultSet.getString("subject_name"));
|
||||||
|
logger.info("Science Teacher Name:" + resultSet.getString("teacher_name"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenAutoCache_whenQuery_thenSuccess() throws SQLException {
|
||||||
|
URL url = ClassLoader.getSystemClassLoader().getResource("test.db");
|
||||||
|
String folderPath = url.getPath().substring(0, url.getPath().lastIndexOf('/'));
|
||||||
|
logger.info("Cache Location:" + folderPath);
|
||||||
|
try(Connection connection = getConnection(Map.of("AutoCache", "true", "CacheLocation", folderPath))) {
|
||||||
|
PreparedStatement preparedStatement = connection.prepareStatement("select id, name from Demo.Subject");
|
||||||
|
|
||||||
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
while(resultSet.next()) {
|
||||||
|
logger.info("Subject Name:" + resultSet.getString("name"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"View_Teacher_Details": {
|
||||||
|
"query": "SELECT t.name as teacher_name, t.joining_date as joining_date, s.name as subject_name from Demo.Teacher_Details AS td INNER JOIN Demo.Teacher AS t ON t.id = td.teacher_id INNER JOIN Demo.Subject AS s on s.id = td.subject_id"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue