Compare commits

...

2 Commits

  1. 7
      pom.xml
  2. 12
      schema/load_all.sh
  3. 20
      schema/load_archive.sql
  4. 14
      schema/load_brewscans.sql
  5. 21
      schema/load_gitscans.sql
  6. 6
      schema/load_offerings.sql
  7. 16
      schema/load_pncscans.sql
  8. 15
      schema/load_results.sql
  9. 28
      schema/load_scans.sql
  10. 5
      schema/schema.sql
  11. 28
      src/main/java/dto/ConnectDB.java
  12. 3
      src/main/java/rest/CreateGetResource.java
  13. 62
      src/main/java/rest/CreateScanRequest.java
  14. 32
      src/main/java/rest/CreateScanResource.java
  15. 22
      src/main/java/rest/CreateStartScan.java
  16. 3
      src/main/java/rest/RemoveScan.java
  17. 6
      src/main/resources/application.properties
  18. 71
      src/test/java/dto/FailingDbConnectionTests.java
  19. 18
      src/test/java/dto/TestDbConnection.java
  20. 3
      src/test/resources/application.properties

7
pom.xml

@ -142,13 +142,6 @@
<version>3.0.1</version>
</dependency>
</dependencies>
<!-- <repositories>
<repository>
<id>jboss</id>
<name>JBoss repository</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
</repositories> -->
<build>
<plugins>
<plugin>

12
schema/load_all.sh

@ -0,0 +1,12 @@
#!/bin/sh
set +e
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/schema.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_offerings.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_brewscans.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_pncscans.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_gitscans.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_results.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_scans.sql
psql -U $POSTGRESQL_USER -h localhost -p $POSTGRESQL_PORT -a -f $HOME/tmp/osh/covscanrest/schema/load_archive.sql

20
schema/load_archive.sql

@ -0,0 +1,20 @@
CREATE TABLE IF NOT EXISTS osh.archive(
scan_id SERIAL,
offering_id VARCHAR(100),
event_id VARCHAR(100) NOT NULL,
is_managed_service BOOLEAN NOT NULL,
component_list VARCHAR(100),
datetime TIMESTAMP WITHOUT TIME ZONE DEFAULT (NOW() AT TIME ZONE 'utc') NOT NULL,
owner VARCHAR(50) NOT NULL,
results SERIAL,
status VARCHAR (50) CONSTRAINT valid_status CHECK(status in ('PENDING', 'DELETED', 'COMPLETED', 'IN PROGRESS')),
last_updated TIMESTAMP WITHOUT TIME ZONE DEFAULT (NOW() AT TIME ZONE 'utc') NOT NULL,
PRIMARY KEY(scan_id),
FOREIGN KEY (offering_id) REFERENCES osh.offerings(offering_id),
FOREIGN KEY (results) REFERENCES osh.results(results_id)
);
INSERT INTO osh.archive (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(1,'ansible-automation-platform','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',1,'COMPLETED');
INSERT INTO osh.archive (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(2,'eclipse-vertx','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',2,'COMPLETED');

14
schema/load_brewscans.sql

@ -0,0 +1,14 @@
CREATE TABLE IF NOT EXISTS osh.brewscans(
id SERIAL,
build_system_type VARCHAR(80),
brew_id VARCHAR(100),
brew_nvr VARCHAR(100),
pnc_id VARCHAR(100),
artifact_type VARCHAR(100),
file_name VARCHAR(100),
built_from_source BOOLEAN,
PRIMARY KEY(id)
);
INSERT INTO osh.brewscans (id,build_system_type,brew_id,brew_nvr,pnc_id,artifact_type,file_name,built_from_source)
VALUES(1,'brew','brew-id-1','brew-nvr-1','pnc-id-1','jar','my-file-1',true);

21
schema/load_gitscans.sql

@ -0,0 +1,21 @@
CREATE TABLE IF NOT EXISTS osh.gitscans (
id SERIAL,
build_system_type VARCHAR(80),
repository VARCHAR(150),
reference VARCHAR(100),
commit_id VARCHAR(100),
-- SHA256 has a length of 256 bits, so 256 bits would represent 64 hex characters
hashsum VARCHAR(64),
PRIMARY KEY(id)
);
INSERT INTO osh.gitscans (id,build_system_type,repository,reference,commit_id)
VALUES(1, 'git', 'http://github.com/rpms/kubevirt-cpaas-mvp', '9fd87a76beaba5cd6b93cb6f02bf1d88c4855a45','1c1007b8');
INSERT INTO osh.gitscans (id,build_system_type,repository,reference,commit_id)
VALUES(2, 'git', 'http://github.com/rpms/kubevirt-cpaas-mvp', '9fd87a76beaba5cd6b93cb6f02bf1d88c4855a45','1c1007b8');
INSERT INTO osh.gitscans (id,build_system_type,repository,reference,commit_id)
VALUES(3, 'git', 'http://github.com/rpms/kubevirt-cpaas-mvp', '9fd87a76beaba5cd6b93cb6f02bf1d88c4855a45','1c1007b8');
INSERT INTO osh.gitscans (id,build_system_type,repository,reference,commit_id)
VALUES(4, 'git', 'http://github.com/rpms/kubevirt-cpaas-mvp', '9fd87a76beaba5cd6b93cb6f02bf1d88c4855a45','1c1007b8');
INSERT INTO osh.gitscans (id,build_system_type,repository,reference,commit_id)
VALUES(5, 'git', 'http://github.com/rpms/kubevirt-cpaas-mvp', '9fd87a76beaba5cd6b93cb6f02bf1d88c4855a45','1c1007b8');

6
schema/populate.sql → schema/load_offerings.sql

@ -1,3 +1,9 @@
CREATE TABLE IF NOT EXISTS osh.offerings(
offering_id VARCHAR(100),
description VARCHAR(200),
PRIMARY KEY (offering_id)
);
INSERT INTO osh.offerings(offering_id,description) VALUES ('ansible-automation-platform','Ansible Automation Platform (AAP)');
INSERT INTO osh.offerings(offering_id,description) VALUES ('advisor','Insights Advisor');
INSERT INTO osh.offerings(offering_id,description) VALUES ('ansible-on-aws','Ansible on AWS');

16
schema/load_pncscans.sql

@ -0,0 +1,16 @@
CREATE TABLE IF NOT EXISTS osh.pncscans(
id SERIAL,
build_system_type VARCHAR(80),
build_id VARCHAR(100),
PRIMARY KEY(id)
);
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(1, 'pnc', 'AA123AG456');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(2, 'pnc', 'B2');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(3, 'pnc', 'B3');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(4, 'pnc', 'B4');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(5, 'pnc', 'B5');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(6, 'pnc', 'B6');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(7, 'pnc', 'B7');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(8, 'pnc', 'B8');
INSERT INTO osh.pncscans (id,build_system_type,build_id) VALUES(9, 'pnc', 'B9');

15
schema/load_results.sql

@ -0,0 +1,15 @@
CREATE TABLE IF NOT EXISTS osh.results(
results_id SERIAL,
datetime TIMESTAMP WITHOUT TIME ZONE DEFAULT (NOW() AT TIME ZONE 'utc') NOT NULL,
state BOOLEAN,
logs bytea,
task_reference VARCHAR(50),
PRIMARY KEY (results_id)
);
INSERT INTO osh.results (results_id,datetime,state,logs)
VALUES(1,'2023-06-22 16:04:04.816453',true,bytea('/home/lbossis/osh/postgres/logs/bulk-load.log.hex'));
INSERT INTO osh.results (results_id,datetime,state,logs)
VALUES(2,'2023-06-22 16:04:04.816453',true,bytea('/home/lbossis/osh/postgres/logs/inp.log.hex'));
INSERT INTO osh.results (results_id,datetime,state,logs)
VALUES(3,'2023-06-22 16:04:04.816453',true,bytea('/home/lbossis/osh/postgres/logs/bulk-load.log'));

28
schema/load_scans.sql

@ -0,0 +1,28 @@
CREATE TABLE IF NOT EXISTS osh.scans(
scan_id SERIAL,
offering_id VARCHAR(100),
event_id VARCHAR(100) NOT NULL,
is_managed_service BOOLEAN NOT NULL,
component_list VARCHAR(100),
datetime TIMESTAMP WITHOUT TIME ZONE DEFAULT (NOW() AT TIME ZONE 'utc') NOT NULL,
owner VARCHAR(50) NOT NULL,
results SERIAL,
status VARCHAR (50) CONSTRAINT valid_status CHECK(status in ('PENDING', 'DELETED', 'COMPLETED', 'IN PROGRESS')),
last_updated TIMESTAMP WITHOUT TIME ZONE DEFAULT (NOW() AT TIME ZONE 'utc') NOT NULL,
PRIMARY KEY(scan_id),
FOREIGN KEY (offering_id) REFERENCES osh.offerings(offering_id),
FOREIGN KEY (results) REFERENCES osh.results(results_id)
);
INSERT INTO osh.scans (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(1,'ansible-automation-platform','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',1,'PENDING');
INSERT INTO osh.scans (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(2,'ansible-automation-platform','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',1,'IN PROGRESS');
INSERT INTO osh.scans (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(3,'ansible-automation-platform','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',1,'COMPLETED');
INSERT INTO osh.scans (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(4,'eclipse-vertx','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',2,'PENDING');
INSERT INTO osh.scans (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(5,'eclipse-vertx','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',2,'IN PROGRESS');
INSERT INTO osh.scans (scan_id,offering_id,event_id,is_managed_service,component_list,datetime,owner,results,status)
VALUES(6,'eclipse-vertx','event-id-1',true,'publisher','2023-06-22 16:04:04.816453','RedHat',2,'COMPLETED');

5
schema/schema.sql

@ -2,10 +2,12 @@ CREATE SCHEMA osh;
GRANT USAGE ON SCHEMA osh TO postgres;
SET SEARCH_PATH TO osh;
CREATE TABLE IF NOT EXISTS osh.offerings(
offering_id VARCHAR(100),
description VARCHAR(200),
PRIMARY KEY (offeringId)
PRIMARY KEY (offering_id)
);
CREATE TABLE IF NOT EXISTS osh.results(
@ -17,7 +19,6 @@ CREATE TABLE IF NOT EXISTS osh.results(
PRIMARY KEY (results_id)
);
CREATE TABLE IF NOT EXISTS osh.scans(
scan_id SERIAL,
offering_id VARCHAR(100),

28
src/main/java/dto/ConnectDB.java

@ -1,25 +1,39 @@
package dto;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import static constants.PSGQL.*;
import static io.smallrye.common.constraint.Assert.assertNotNull;
// @TODO Replace hard-coded credentials; make use of our secure db connection practice
public class ConnectDB {
private static final Logger logger = LoggerFactory.getLogger(ConnectDB.class);
public Connection connect() throws JSONException {
public Connection connect() throws JSONException, SQLException, IOException {
FileReader reader = new FileReader("src/main/resources/application.properties");
Properties p = new Properties();
p.load(reader);
String port = p.getProperty("quarkus.datasource.devservices.port");
String uid = p.getProperty("quarkus.datasource.username");
String pwd = p.getProperty("quarkus.datasource.password");
try {
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("Connected to PostgreSQL server");
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:" + port + "/", uid, pwd);
logger.info("Opened DB connection: " + conn);
assertNotNull(conn);
return conn;
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getClass().getName() + ": " + e.getMessage());
throw new SQLException();
}
return null;
}
}

3
src/main/java/rest/CreateGetResource.java

@ -1,5 +1,6 @@
package rest;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Set;
@ -53,7 +54,7 @@ public class CreateGetResource {
rs.getString("is_managed_service"),
rs.getString("component_list")));
}
} catch (SQLException e) {
} catch (SQLException | IOException e) {
logger.error(e.getMessage());
}
return Scans;

62
src/main/java/rest/CreateScanRequest.java

@ -21,10 +21,14 @@ import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import io.quarkus.security.Authenticated;
@Authenticated
@Path("/scanRequest")
public class CreateScanRequest {
@ -53,7 +57,7 @@ public class CreateScanRequest {
pstmt.setString(6, brewObj.getFileName());
pstmt.setBoolean(7, brewObj.getBuiltFromSource());
pstmt.executeUpdate();
} catch (SQLException e) {
} catch (SQLException | IOException e) {
logger.error(e.getMessage());
}
greetingResource.invokeScanTask(brewObj.getBrewNvr());
@ -66,21 +70,20 @@ public class CreateScanRequest {
public void invokeGitScanAnalyze(@Valid String scanInvocation)throws URISyntaxException {
throw new UnsupportedOperationException("unImplemented fucntionality");
// JSONObject jsonData = new JSONObject(scanInvocation);
// GitObj gitObj = GitObjPayload.constructScanPayload(jsonData);
// ConnectDB connectDB = new ConnectDB();
// Connection conn = connectDB.connect();
// Statement stmt = null;
// String sql = "INSERT INTO gitscans (buildsystemtype, repository, reference, commitid) VALUES ('"+gitObj.buildSystemType+"','"+gitObj.repository+"','"+gitObj.reference+"','"+gitObj.commitId+"')";
// try{
// stmt = conn.createStatement();
// ResultSet rs = stmt.executeQuery(sql);
// conn.close();
// } catch (SQLException e){
// System.out.println(e);
// }
// return gitObj;
//JSONObject jsonData = new JSONObject(scanInvocation);
//GitObj gitObj = GitObjPayload.constructScanPayload(jsonData);
//ConnectDB connectDB = new ConnectDB();
//try(Connection conn = connectDB.connect();
// PreparedStatement pstmt = conn.prepareStatement(GitObj.SQL)) {
// pstmt.setString(1, gitObj.getBuildSystemType());
// pstmt.setString(2, gitObj.getRepository());
// pstmt.setString(3, gitObj.getReference());
// pstmt.setString(4, gitObj.getCommitId());
// pstmt.executeUpdate();
//} catch (SQLException | IOException e) {
// logger.error(e.getMessage());
//}
//return gitObj;
}
@POST
@ -88,20 +91,17 @@ public class CreateScanRequest {
@Consumes({ "application/json" })
public void invokePncScanAnalyze(@Valid String scanInvocation)throws URISyntaxException {
throw new UnsupportedOperationException("unImplemented fucntionality");
// JSONObject jsonData = new JSONObject(scanInvocation);
// PncObj pncObj = PncObjPayload.constructScanPayload(jsonData);
// ConnectDB connectDB = new ConnectDB();
// Connection conn = connectDB.connect();
// Statement stmt = null;
// String sql = "INSERT INTO pncscans (buildsystemtype, buildid) VALUES ('"+pncObj.buildSystemType+"','"+pncObj.buildId+"')";
// try{
// stmt = conn.createStatement();
// ResultSet rs = stmt.executeQuery(sql);
// conn.close();
// } catch (SQLException e){
// System.out.println(e);
// }
// return pncObj;
//JSONObject jsonData = new JSONObject(scanInvocation);
//PncObj pncObj = PncObjPayload.constructScanPayload(jsonData);
//ConnectDB connectDB = new ConnectDB();
//try(Connection conn = connectDB.connect();
// PreparedStatement pstmt = conn.prepareStatement(PncObj.SQL)) {
// pstmt.setString(1, pncObj.getBuildSystemType());
// pstmt.setString(2, pncObj.getBuildId());
// pstmt.executeUpdate();
//} catch (SQLException | IOException e) {
// logger.error(e.getMessage());
//}
//return pncObj;
}
}

32
src/main/java/rest/CreateScanResource.java

@ -3,11 +3,9 @@ package rest;
import dto.ConnectDB;
import dto.ScanObjPayload;
import dto.ScanObj;
import dto.ScanObjPayload;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.json.JSONObject;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -18,6 +16,7 @@ import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@ -35,19 +34,20 @@ public class CreateScanResource {
//in theory should take List<String> to clean it up
public void invokeScanAnalyze(@Valid String scanInvocation) throws URISyntaxException {
throw new UnsupportedOperationException("unImplemented fucntionality");
// JSONObject jsonData = new JSONObject(scanInvocation);
// ScanObj scanObj = ScanObjPayload.constructScanPayload(jsonData);
// ConnectDB connectDB = new ConnectDB();
// Connection conn = connectDB.connect();
// Statement stmt = null;
// String sql = "INSERT INTO scans (scanid, productid, eventid, ismanagedservice, componentlist) VALUES ('" +scanObj.scanId+"', '"+scanObj.productId+"', '"+scanObj.eventId+"', '"+scanObj.isManagedService+"', '"+scanObj.componentList+"')";
// try{
// stmt = conn.createStatement();
// ResultSet rs = stmt.executeQuery(sql);
// conn.close();
// } catch (SQLException e){
// System.out.println(e);
// }
// return scanObj;
//JSONObject jsonData = new JSONObject(scanInvocation);
//ScanObj scanObj = ScanObjPayload.constructScanPayload(jsonData);
//ConnectDB connectDB = new ConnectDB();
//try(Connection conn = connectDB.connect();
// PreparedStatement pstmt = conn.prepareStatement(ScanObj.SQL)) {
// pstmt.setString(1, scanObj.getScanId());
// pstmt.setString(2, scanObj.getProductId());
// pstmt.setString(3, scanObj.getEventId());
// pstmt.setString(4, scanObj.getIsManagedService());
// pstmt.setString(5, scanObj.getComponentList());
// pstmt.executeUpdate();
//} catch (SQLException | IOException e) {
// logger.error(e.getMessage());
//}
//return scanObj;
}
}

22
src/main/java/rest/CreateStartScan.java

@ -15,6 +15,7 @@ import org.slf4j.LoggerFactory;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.PathParam;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@ -34,11 +35,21 @@ public class CreateStartScan {
@Path("/{scanId}")
public void invokeScanAnalyze(@PathParam("scanId") String scanId) throws URISyntaxException {
throw new UnsupportedOperationException("unImplemented fucntionality");
// ConnectDB connectDB = new ConnectDB();
// Connection conn = connectDB.connect();
// //this is ugly needs to berewritten
// Statement stmt = null;
// ScanObj finalScan = null;
//ScanObj finalScan = null;
//ConnectDB connectDB = new ConnectDB();
//try (Connection conn = connectDB.connect()) {
// finalScan = selectDataForArchiving(conn, scanId);
// if (finalScan != null) {
// archiveSelectedScans(conn, finalScan);
// postArchivingCleanup(conn, scanId);
// } else {
// logger.warn("No data match found for scan ID=" + scanId);
// }
//} catch (SQLException | IOException e) {
// logger.error(e.getMessage());
//}
//return finalScan;
}
// String sql = "SELECT * FROM scans WHERE scanid=" + scanId;
// //need to add figure out an archieve system and wether its nessacery (archieve value??)
@ -64,5 +75,4 @@ public class CreateStartScan {
// System.out.println(e);
// }
// return finalScan;
}
}

3
src/main/java/rest/RemoveScan.java

@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
import javax.ws.rs.Path;
import javax.ws.rs.DELETE;
import javax.ws.rs.PathParam;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@ -35,7 +36,7 @@ public class RemoveScan {
pstmt.setString(1, scanId);
pstmt.executeUpdate();
rc = true;
} catch (SQLException e) {
} catch (SQLException | IOException e) {
logger.error(e.getMessage());
}
return rc;

6
src/main/resources/application.properties

@ -20,6 +20,12 @@
#%quarkus.arc.unremovable-types=io.quarkiverse.kerberos.*,io.quarkiverse.kerberos.KerberosPrincipal
#%dev.quarkus.kerberos.keytab-path= HTTP_osh-pct-security-tooling.apps.ocp-c1.prod.psi.redhat.com@IPA.REDHAT.COM.keytab
#%dev.quarkus.kerberos.service-principal-name= HTTP/osh-pct-security-tooling.apps.ocp-c1.prod.psi.redhat.com@IPA.REDHAT.COM
quarkus.datasource.devservices.enabled=true
quarkus.datasource.db-kind=postgresql
quarkus.datasource.devservices.volumes."/local/test/data"=/var/lib/postgresql/data
quarkus.datasource.devservices.port=36000
quarkus.datasource.username=quarkus
quarkus.datasource.password=quarkus
%stage.quarkus.openshift.name=osh
%stage.quarkus.openshift.labels.env=stage

71
src/test/java/dto/FailingDbConnectionTests.java

@ -0,0 +1,71 @@
package dto;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.NoSuchElementException;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class FailingDbConnectionTests {
private static final Logger logger = LoggerFactory.getLogger(FailingDbConnectionTests.class);
@ConfigProperty(name = "quarkus.datasource.devservices.port", defaultValue = "36000")
String port;
@ConfigProperty(name = "quarkus.datasource.username", defaultValue = "quarkus")
String uid;
@ConfigProperty(name = "quarkus.datasource.password")
String pwd;
/**
* These tests fail due to failed initialization of the above variables via @ConfigProperty and
* via direct call to ConfigProvider.getConfig().getValue() whereas application.properties have all
* these properties defined. Since we know they fail for the time being we expect such behaviour and
* put reversed asserts accordingly in order not to break execution of the entire test suit.
*/
@Test
void TestDbConnUsingConfigProperty() {
logger.info(String.format("TestDbConnViaConfigProperty: port=%s uid=%s pwd=%s%n", port, uid, pwd));
try (Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:" + port + "/", uid, pwd)) {
logger.info("Opened database connection to PostgreSQL using @ConfigProperty: " + conn);
assertNotNull(conn);
} catch (Exception e) {
logger.error(e.getClass().getName() + ": " + e.getMessage());
}
}
@Test
void TestDbConnUsingConfigProvider() {
try {
String _port = getPropertyOfStringType("quarkus.datasource.devservices.port");
String _uid = getPropertyOfStringType("quarkus.datasource.username");
String _pwd = getPropertyOfStringType("quarkus.datasource.password");
logger.info(String.format("TestDbConnViaConfigProvider: port=%s uid=%s pwd=%s%n", _port, _uid, _pwd));
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:" + _port + "/", _uid, _pwd);
logger.info("Opened database connection to PostgreSQL using ConfigProvider: " + conn);
assertNotNull(conn);
conn.close();
} catch (Exception e) {
logger.error(e.getClass().getName() + ": " + e.getMessage());
}
}
private static String getPropertyOfStringType(String name) {
try {
String value = ConfigProvider.getConfig().getValue(name, String.class);
logger.info("Found config property '" + name + "' value '" + value + "'");
return value;
} catch (NoSuchElementException e) {
logger.error(e.getClass().getName() + ": " + e.getMessage());
return null;
}
}
}

18
src/test/java/dto/TestDbConnection.java

@ -0,0 +1,18 @@
package dto;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import static org.junit.jupiter.api.Assertions.*;
class TestDbConnection {
@Test
void TestDbConn() throws SQLException, IOException {
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
assertNotNull(conn);
}
}

3
src/test/resources/application.properties

@ -0,0 +1,3 @@
quarkus.datasource.devservices.port=36000
quarkus.datasource.username=quarkus
quarkus.datasource.password=quarkus
Loading…
Cancel
Save