From 04fd871fa66ae50ba78e1963655f99bad0a1fa7a Mon Sep 17 00:00:00 2001 From: Jonathan Christison Date: Mon, 26 Jun 2023 15:50:56 +0100 Subject: [PATCH] Add test cases and scripts to load data via bulk load --- pom.xml | 7 -- schema/load_archive.sql | 18 +++++ schema/load_brewscans.sql | 14 ++++ schema/load_gitscans.sql | 21 ++++++ schema/{populate.sql => load_offerings.sql} | 6 ++ schema/load_pncscans.sql | 16 +++++ schema/load_results.sql | 9 +++ schema/load_scans.sql | 16 +++++ schema/schema.sql | 3 +- src/main/java/dto/ConnectDB.java | 28 ++++++-- src/main/java/rest/CreateGetResource.java | 3 +- src/main/java/rest/CreateScanRequest.java | 62 ++++++++-------- src/main/java/rest/CreateScanResource.java | 32 ++++----- src/main/java/rest/CreateStartScan.java | 22 ++++-- src/main/java/rest/RemoveScan.java | 3 +- src/main/resources/application.properties | 6 ++ .../java/dto/FailingDbConnectionTests.java | 71 +++++++++++++++++++ src/test/java/dto/TestDbConnection.java | 18 +++++ src/test/resources/application.properties | 3 + 19 files changed, 287 insertions(+), 71 deletions(-) create mode 100644 schema/load_archive.sql create mode 100644 schema/load_brewscans.sql create mode 100644 schema/load_gitscans.sql rename schema/{populate.sql => load_offerings.sql} (99%) create mode 100644 schema/load_pncscans.sql create mode 100644 schema/load_results.sql create mode 100644 schema/load_scans.sql create mode 100644 src/test/java/dto/FailingDbConnectionTests.java create mode 100644 src/test/java/dto/TestDbConnection.java create mode 100644 src/test/resources/application.properties 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