From 3db3b0149ec2bed04038714b6aa3bf4c1377d724 Mon Sep 17 00:00:00 2001 From: Javier <10879637+javiertuya@users.noreply.github.com> Date: Sat, 22 Jun 2024 18:21:52 +0200 Subject: [PATCH] Add db tests --- .github/workflows/test.yml | 2 +- .../tdrules/store/loader/oa/TestIssues.java | 2 - .../store/loader/oa/TestOaLiveGeneration.java | 5 +- .../tdrules/store/loader/sql/Base.java | 46 ++++++++----------- .../loader/sql/TestOracleGeneration.java | 2 +- .../loader/sql/TestSqlserverGeneration.java | 10 ++-- 6 files changed, 28 insertions(+), 39 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 18ca6aa..c4c1ded 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -83,7 +83,7 @@ jobs: if: ${{ matrix.scope != 'Core' }} run: > mvn test surefire-report:report -Daggregate=true - -Dtest=Test${{ matrix.scope }}* -pl tdrules-client-rdb,tdrules-store-rdb -am -Dsurefire.failIfNoSpecifiedTests=false + -Dtest=Test${{ matrix.scope }}* -pl tdrules-client-rdb,tdrules-store-rdb,tdrules-store-loader -am -Dsurefire.failIfNoSpecifiedTests=false -Dmaven.test.failure.ignore=true -U --no-transfer-progress -Duser.timezone=Europe/Madrid # NOTE: must specify a timezone to avoid oracle error ORA-01882: timezone region not found diff --git a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestIssues.java b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestIssues.java index ab24e18..19527e3 100644 --- a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestIssues.java +++ b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestIssues.java @@ -40,8 +40,6 @@ public void testPkInArray() throws IOException { String actual=dg.getDataAdapter().getAllAsString().replace("\r", ""); FileUtil.fileWrite(TEST_PATH_OUTPUT, fileName + ".txt", actual); - //System.out.println(new MermaidWriter(schema1).getMermaid()); - //System.out.println(actual); String expected= ("'ProductDTORes':{'productId':1,'age':2}\n" + "'UserDTORes':{'email':'XXX','name':'202'}\n" diff --git a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestOaLiveGeneration.java b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestOaLiveGeneration.java index eaf362a..6c42994 100644 --- a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestOaLiveGeneration.java +++ b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/oa/TestOaLiveGeneration.java @@ -16,7 +16,6 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -//import org.mockserver.client.server.MockServerClient; import org.mockserver.integration.ClientAndServer; import org.mockserver.socket.PortFactory; @@ -293,7 +292,7 @@ public void testErrorServer() { // expectation returns error 500 LoaderException exception = assertThrows(LoaderException.class, () -> { DataLoader dtg = getLiveGenerator(); - createErrorExpectationPost("/master", "{'I1':10}", "{'pk1':991,'I1':10}"); + createErrorExpectationPost("/master", "{'I1':10}"); dtg.load("master", "pk1,i1", "@km1,10"); }); assertEquals("endWrite: Did not completed properly, response: 500 Internal Server Error - body: Error message" @@ -348,7 +347,7 @@ private void createExpectationPostWithAuth(String endpointPath, String requestBo .withBody(json(responseBody)) ); } - private void createErrorExpectationPost(String endpointPath, String requestBody, String responseBody) { + private void createErrorExpectationPost(String endpointPath, String requestBody) { mockServer.when(request() .withMethod("POST") .withPath("/oatest" + endpointPath) diff --git a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/Base.java b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/Base.java index a59814d..d5d94ce 100644 --- a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/Base.java +++ b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/Base.java @@ -2,15 +2,11 @@ import static org.junit.Assert.assertEquals; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; -import java.util.Properties; import org.junit.Before; import org.junit.Rule; @@ -18,43 +14,41 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import giis.tdrules.store.rdb.SchemaException; +import giis.portable.util.FileUtil; +import giis.portable.util.Parameters; +import giis.tdrules.store.rdb.JdbcProperties; -/** - * Definiciones comunes para las pruebas de las clases de manejo de datos - * para ser utilizado como clase base de estas pruebas - */ public class Base { Logger log = LoggerFactory.getLogger(this.getClass()); - // Datos principales para parametrizacion del sgbd usado en el test - // Esta es la referencia, el resto de sgbds son clases heredadas que cambian este valor - protected String dbmsname = "sqlserver"; - - // nombres de las bases de datos a utilizar - public static final String TEST_DBNAME2 = "tdstorerdb2"; - - protected Properties config; + protected static final String PLATFORM = Parameters.getPlatformName(); + private static final String SETUP_PATH = FileUtil.getPath(Parameters.getProjectRoot(), "..", "setup"); + private static final String ENVIRONMENT_PROPERTIES = FileUtil.getPath(SETUP_PATH, "environment.properties"); + private static final String DATABASE_PROPERTIES = FileUtil.getPath(SETUP_PATH, "database.properties"); + public static final String TEST_DBNAME = "tdstorerdb2"; + + protected String dbmsname = "sqlserver"; + @Rule public TestName testName = new TestName(); @Before public void setUp() throws SQLException { log.debug("*** Running test: {}", testName.getMethodName()); - config = new Properties(); - try { - config.load(new FileInputStream(new File("../tdrules4.properties"))); - } catch (IOException e) { - throw new SchemaException("Can't load test configuration file"); - } } + /** + * Connection user and url are obtained from a properties file, + * password is obtained from environment, if not defined, another properties file is used as fallback + */ protected Connection getConnection(String database) throws SQLException { + log.debug("Create connection to '{}' database", dbmsname); + String propPrefix = "tdrules." + PLATFORM + "." + TEST_DBNAME + "." + dbmsname; Connection conn = DriverManager.getConnection( - config.getProperty("tdrules." + dbmsname + "." + database + ".url"), - config.getProperty("tdrules." + dbmsname + "." + database + ".user"), - config.getProperty("tdrules." + dbmsname + "." + database + ".password")); + new JdbcProperties().getProp(DATABASE_PROPERTIES, propPrefix + ".url"), + new JdbcProperties().getProp(DATABASE_PROPERTIES, propPrefix + ".user"), + new JdbcProperties().getEnvVar(ENVIRONMENT_PROPERTIES, "TEST_" + dbmsname.toUpperCase() + "_PWD")); // Try to avoid lock problems that make flaky tests when running concurrently // with other tests (mainly for getTableList) if ("sqlserver".equals(dbmsname)) diff --git a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestOracleGeneration.java b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestOracleGeneration.java index 1702816..ee2a5c4 100644 --- a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestOracleGeneration.java +++ b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestOracleGeneration.java @@ -30,7 +30,7 @@ protected String getDateTimeForSql() { @Override protected void createTablesAndViews() throws SQLException { super.createTablesAndViews(); - Connection dbt = getConnection(TEST_DBNAME2); // modo conectado para que se cierre la conexion + Connection dbt = getConnection(TEST_DBNAME); // modo conectado para que se cierre la conexion try { execute(dbt, "drop sequence seq_ggm"); } catch (Throwable e) { diff --git a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestSqlserverGeneration.java b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestSqlserverGeneration.java index 88a3a8d..73eefe4 100644 --- a/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestSqlserverGeneration.java +++ b/tdrules-store-loader/src/test/java/test4giis/tdrules/store/loader/sql/TestSqlserverGeneration.java @@ -45,7 +45,7 @@ public class TestSqlserverGeneration extends Base { public void setUp() throws SQLException { super.setUp(); dropTablesAndViews(); - db = getConnection(TEST_DBNAME2); + db = getConnection(TEST_DBNAME); dbms = new SchemaReaderJdbc(db).getDbmsType(); } @@ -69,7 +69,7 @@ protected String getDate2() { } protected void createTablesAndViews() throws SQLException { - Connection dbt = getConnection(TEST_DBNAME2); + Connection dbt = getConnection(TEST_DBNAME); execute(dbt, "create table Gg0 (Pk1 int, I1 int, primary key(Pk1))"); // tabla basica con datos pk, fk y enteros/characteres con alguno nullable, // fechas en dos formatos, date+time y date, uno nullable y otro no @@ -90,7 +90,7 @@ protected void createTablesAndViewsMultipleRelations(boolean useCircularRelation // relaciones (detalle-maestro): gg0-gg1-ggd-(ggm-gg2-(gg3 | ggd...) | gg1) // cadena cirucular ggd-ggm-gg2-ggd // relacion recursiva gg1-ggd-gg2 - Connection dbt = getConnection(TEST_DBNAME2); + Connection dbt = getConnection(TEST_DBNAME); execute(dbt, "create table Gg3 (Pk1 int, primary key(Pk1), Fk1 int)"); execute(dbt, "create table Gg2 (Pk1 int, primary key(Pk1), Fk1 int, Fk2 int)"); String identityType = this.dbms.getDataTypeIdentity("int") + " " + this.dbms.getDataTypeIdentitySuffix(); @@ -111,7 +111,7 @@ protected void createTablesAndViewsMultipleRelations(boolean useCircularRelation } protected void dropTablesAndViews() throws SQLException { - Connection dbt = getConnection(TEST_DBNAME2); // modo conectado para que se cierre la conexion + Connection dbt = getConnection(TEST_DBNAME); // modo conectado para que se cierre la conexion executeNotThrow(dbt, "alter table gg2 drop constraint FK_GG2_GG3"); executeNotThrow(dbt, "alter table gg2 drop constraint FK_GG2_GGD"); executeNotThrow(dbt, "alter table ggm drop constraint FK_GGM_GG2"); @@ -214,8 +214,6 @@ public void testGenerateRowUserSpecified2UsingDate() throws SQLException { execute(db, "alter table gg1 drop column d2"); execute(db, "alter table gg1 add d1 DATE"); execute(db, "alter table gg1 add d2 " + this.dbms.getDataTypeDatetime() + " NOT NULL"); - // execute(db, "alter table gg1 alter column d2 " + - // this.dbms.getDataTypeDatetime() + " NOT NULL"); dtg.load("gg1", "pk1=1,i1=10,c1='abc',d1=" + getDate1()); dtg.load("gg1", " pk1 = 2 , i2 = 20 , c2 = 'x' , d2=" + getDate2()); dtg.load("gg1", ""); // una tercera sin indicar ningun valor