dao timescale test suite added, testcontainers version upgraded to support timescaledb
This commit is contained in:
parent
6445fec439
commit
f0d19afd9c
@ -0,0 +1,28 @@
|
||||
/**
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* 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 org.thingsboard.server.dao;
|
||||
|
||||
import org.junit.extensions.cpsuite.ClasspathSuite;
|
||||
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@RunWith(ClasspathSuite.class)
|
||||
@ClassnameFilters({
|
||||
"org.thingsboard.server.dao.service.*.nosql.*ServiceTimescaleTest",
|
||||
})
|
||||
public class TimescaleDaoServiceTestSuite {
|
||||
|
||||
}
|
||||
@ -0,0 +1,65 @@
|
||||
/**
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* 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 org.thingsboard.server.dao;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.io.Resources;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
public class TimescaleSqlInitializer {
|
||||
|
||||
private static final List<String> sqlFiles = List.of(
|
||||
"sql/schema-timescale.sql",
|
||||
"sql/schema-entities.sql",
|
||||
"sql/schema-entities-idx.sql",
|
||||
"sql/schema-entities-idx-psql-addon.sql",
|
||||
"sql/system-data.sql",
|
||||
"sql/system-test-psql.sql");
|
||||
private static final String dropAllTablesSqlFile = "sql/timescale/drop-all-tables.sql";
|
||||
|
||||
public static void initDb(Connection conn) {
|
||||
cleanUpDb(conn);
|
||||
log.info("initialize Timescale DB...");
|
||||
try {
|
||||
for (String sqlFile : sqlFiles) {
|
||||
URL sqlFileUrl = Resources.getResource(sqlFile);
|
||||
String sql = Resources.toString(sqlFileUrl, Charsets.UTF_8);
|
||||
conn.createStatement().execute(sql);
|
||||
}
|
||||
} catch (IOException | SQLException e) {
|
||||
throw new RuntimeException("Unable to init the Timescale database. Reason: " + e.getMessage(), e);
|
||||
}
|
||||
log.info("Timescale DB is initialized!");
|
||||
}
|
||||
|
||||
private static void cleanUpDb(Connection conn) {
|
||||
log.info("clean up Timescale DB...");
|
||||
try {
|
||||
URL dropAllTableSqlFileUrl = Resources.getResource(dropAllTablesSqlFile);
|
||||
String dropAllTablesSql = Resources.toString(dropAllTableSqlFileUrl, Charsets.UTF_8);
|
||||
conn.createStatement().execute(dropAllTablesSql);
|
||||
} catch (IOException | SQLException e) {
|
||||
throw new RuntimeException("Unable to clean up the Timescale database. Reason: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* 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 org.thingsboard.server.dao.service;
|
||||
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Inherited
|
||||
@Documented
|
||||
@TestPropertySource(locations = {"classpath:application-test.properties", "classpath:timescale-test.properties"})
|
||||
public @interface DaoTimescaleTest {
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* 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 org.thingsboard.server.dao.service.timeseries.nosql;
|
||||
|
||||
import org.thingsboard.server.dao.service.DaoTimescaleTest;
|
||||
import org.thingsboard.server.dao.service.timeseries.BaseTimeseriesServiceTest;
|
||||
|
||||
@DaoTimescaleTest
|
||||
public class TimeseriesServiceTimescaleTest extends BaseTimeseriesServiceTest {
|
||||
}
|
||||
18
dao/src/test/resources/timescale-test.properties
Normal file
18
dao/src/test/resources/timescale-test.properties
Normal file
@ -0,0 +1,18 @@
|
||||
database.ts.type=timescale
|
||||
database.ts_latest.type=timescale
|
||||
|
||||
sql.ts_inserts_executor_type=fixed
|
||||
sql.ts_inserts_fixed_thread_pool_size=10
|
||||
|
||||
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
|
||||
spring.jpa.properties.hibernate.order_by.default_null_ordering=last
|
||||
spring.jpa.properties.hibernate.jdbc.log.warnings=false
|
||||
|
||||
spring.jpa.show-sql=false
|
||||
|
||||
spring.jpa.hibernate.ddl-auto=none
|
||||
spring.datasource.username=postgres
|
||||
spring.datasource.password=postgres
|
||||
spring.datasource.url=jdbc:tc:timescaledb:latest-pg12:///thingsboard?TC_DAEMON=true&TC_TMPFS=/testtmpfs:rw&?TC_INITFUNCTION=org.thingsboard.server.dao.TimescaleSqlInitializer::initDb
|
||||
spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
|
||||
spring.datasource.hikari.maximumPoolSize = 50
|
||||
2
pom.xml
2
pom.xml
@ -133,7 +133,7 @@
|
||||
<spring-test-dbunit.version>1.3.0</spring-test-dbunit.version> <!-- 2016 -->
|
||||
<takari-cpsuite.version>1.2.7</takari-cpsuite.version> <!-- 2015 -->
|
||||
<!-- BLACKBOX TEST SCOPE -->
|
||||
<testcontainers.version>1.16.0</testcontainers.version>
|
||||
<testcontainers.version>1.17.3</testcontainers.version>
|
||||
<zeroturnaround.version>1.12</zeroturnaround.version>
|
||||
<opensmpp.version>3.0.0</opensmpp.version>
|
||||
<jgit.version>6.1.0.202203080745-r</jgit.version>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user