Browse Source

Embedded Postgresql test unit added

pull/152/head
mp-loki 9 years ago
parent
commit
6048b45e39
  1. 5
      dao/pom.xml
  2. 109
      dao/src/test/java/org/thingsboard/server/dao/CustomPostgresUnit.java
  3. 13
      dao/src/test/java/org/thingsboard/server/dao/DaoTestSuite.java
  4. 2
      dao/src/test/resources/jpa-test.properties
  5. 5
      dao/src/test/resources/postgres-embedded-test.properties
  6. 7
      pom.xml

5
dao/pom.xml

@ -174,6 +174,11 @@
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ru.yandex.qatools.embed</groupId>
<artifactId>postgresql-embedded</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>

109
dao/src/test/java/org/thingsboard/server/dao/CustomPostgresUnit.java

@ -0,0 +1,109 @@
/**
* Copyright © 2016-2017 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 org.junit.Before;
import org.junit.rules.ExternalResource;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import ru.yandex.qatools.embed.postgresql.EmbeddedPostgres;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import static ru.yandex.qatools.embed.postgresql.distribution.Version.Main.V9_6;
/**
* Created by Valerii Sosliuk on 6/24/2017.
*/
@Slf4j
public class CustomPostgresUnit extends ExternalResource {
private static final String HOST = "host";
private static final String PORT = "port";
private static final String DATABASE = "database";
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private List<String> sqlFiles;
private Properties properties;
private EmbeddedPostgres postgres;
public CustomPostgresUnit(List<String> sqlFiles, String configurationFileName) {
this.sqlFiles = sqlFiles;
this.properties = loadProperties(configurationFileName);
}
@Override
public void before() {
postgres = new EmbeddedPostgres(V9_6);
load();
}
@Override
public void after() {
postgres.stop();
}
private void load() {
Connection conn = null;
try {
String url = postgres.start(properties.getProperty(HOST),
Integer.parseInt(properties.getProperty(PORT)),
properties.getProperty(DATABASE),
properties.getProperty(USERNAME),
properties.getProperty(PASSWORD));
conn = DriverManager.getConnection(url);
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 start embedded postgres. Reason: " + e.getMessage(), e);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
log.error(e.getMessage(), e);
}
}
}
}
private Properties loadProperties(String fileName) {
final Properties properties = new Properties();
try (final InputStream stream = this.getClass().getClassLoader().getResourceAsStream(fileName)) {
properties.load(stream);
return properties;
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}

13
dao/src/test/java/org/thingsboard/server/dao/DaoTestSuite.java

@ -20,9 +20,16 @@ import org.junit.ClassRule;
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.ClassnameFilters;
import org.junit.runner.RunWith;
import ru.yandex.qatools.embed.postgresql.EmbeddedPostgres;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Arrays;
import static ru.yandex.qatools.embed.postgresql.distribution.Version.Main.V9_6;
@RunWith(ClasspathSuite.class)
@ClassnameFilters({
"org.thingsboard.server.dao.service.*Test",
@ -41,4 +48,10 @@ public class DaoTestSuite {
new ClassPathCQLDataSet("cassandra/system-data.cql", false, false),
new ClassPathCQLDataSet("system-test.cql", false, false)),
"cassandra-test.yaml", 30000l);
@ClassRule
public static CustomPostgresUnit postgresUnit = new CustomPostgresUnit(
Arrays.asList("postgres/schema.sql", "postgres/system-data.sql"),
"postgres-embedded-test.properties");
}

2
dao/src/test/resources/jpa-test.properties

@ -5,7 +5,7 @@ sql.enabled=true
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=validate
spring.datasource.url=jdbc:postgresql://localhost:5432/thingsboard
spring.datasource.url=jdbc:postgresql://localhost:5433/thingsboard
spring.datasource.username=postgres
spring.datasource.password=postgres

5
dao/src/test/resources/postgres-embedded-test.properties

@ -0,0 +1,5 @@
host: localhost
port: 5433
database: thingsboard
username: postgres
password: postgres

7
pom.xml

@ -745,6 +745,13 @@
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ru.yandex.qatools.embed</groupId>
<artifactId>postgresql-embedded</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.winsw</groupId>

Loading…
Cancel
Save