diff --git a/pom.xml b/pom.xml
index 8bdcc04..231f7e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -142,13 +142,6 @@
3.0.1
-
diff --git a/schema/load_archive.sql b/schema/load_archive.sql
new file mode 100644
index 0000000..9bf16b1
--- /dev/null
+++ b/schema/load_archive.sql
@@ -0,0 +1,18 @@
+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)
+ VALUES(1,'product-id-1','event-id-1',true,' ');
diff --git a/schema/load_brewscans.sql b/schema/load_brewscans.sql
new file mode 100644
index 0000000..0c082fc
--- /dev/null
+++ b/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);
diff --git a/schema/load_gitscans.sql b/schema/load_gitscans.sql
new file mode 100644
index 0000000..86230ca
--- /dev/null
+++ b/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');
diff --git a/schema/populate.sql b/schema/load_offerings.sql
similarity index 99%
rename from schema/populate.sql
rename to schema/load_offerings.sql
index d2f5584..cbeff7d 100644
--- a/schema/populate.sql
+++ b/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');
diff --git a/schema/load_pncscans.sql b/schema/load_pncscans.sql
new file mode 100644
index 0000000..703f80a
--- /dev/null
+++ b/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');
\ No newline at end of file
diff --git a/schema/load_results.sql b/schema/load_results.sql
new file mode 100644
index 0000000..167635c
--- /dev/null
+++ b/schema/load_results.sql
@@ -0,0 +1,9 @@
+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)
+);
+
diff --git a/schema/load_scans.sql b/schema/load_scans.sql
new file mode 100644
index 0000000..501eec2
--- /dev/null
+++ b/schema/load_scans.sql
@@ -0,0 +1,16 @@
+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)
+);
+
diff --git a/schema/schema.sql b/schema/schema.sql
index f817daa..c62487a 100644
--- a/schema/schema.sql
+++ b/schema/schema.sql
@@ -5,7 +5,7 @@ GRANT USAGE ON SCHEMA osh TO postgres;
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 +17,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),
diff --git a/src/main/java/dto/ConnectDB.java b/src/main/java/dto/ConnectDB.java
index 1944770..ff628f2 100644
--- a/src/main/java/dto/ConnectDB.java
+++ b/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;
}
}
diff --git a/src/main/java/rest/CreateGetResource.java b/src/main/java/rest/CreateGetResource.java
index 1e3f820..060498e 100644
--- a/src/main/java/rest/CreateGetResource.java
+++ b/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;
diff --git a/src/main/java/rest/CreateScanRequest.java b/src/main/java/rest/CreateScanRequest.java
index 4e2f346..005abe6 100644
--- a/src/main/java/rest/CreateScanRequest.java
+++ b/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;
}
}
diff --git a/src/main/java/rest/CreateScanResource.java b/src/main/java/rest/CreateScanResource.java
index 5602898..1cc7933 100644
--- a/src/main/java/rest/CreateScanResource.java
+++ b/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 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;
}
}
diff --git a/src/main/java/rest/CreateStartScan.java b/src/main/java/rest/CreateStartScan.java
index 26c5342..e79fc7c 100644
--- a/src/main/java/rest/CreateStartScan.java
+++ b/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;
- }
}
diff --git a/src/main/java/rest/RemoveScan.java b/src/main/java/rest/RemoveScan.java
index 783873c..3af5a84 100644
--- a/src/main/java/rest/RemoveScan.java
+++ b/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;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 3d48226..ee154c9 100644
--- a/src/main/resources/application.properties
+++ b/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
diff --git a/src/test/java/dto/FailingDbConnectionTests.java b/src/test/java/dto/FailingDbConnectionTests.java
new file mode 100644
index 0000000..8d7b092
--- /dev/null
+++ b/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;
+ }
+ }
+}
diff --git a/src/test/java/dto/TestDbConnection.java b/src/test/java/dto/TestDbConnection.java
new file mode 100644
index 0000000..39bd44e
--- /dev/null
+++ b/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);
+ }
+}
diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties
new file mode 100644
index 0000000..1edef49
--- /dev/null
+++ b/src/test/resources/application.properties
@@ -0,0 +1,3 @@
+quarkus.datasource.devservices.port=36000
+quarkus.datasource.username=quarkus
+quarkus.datasource.password=quarkus