From b9f68bcd2bc4a0b6e764df1545c1d23dbd843073 Mon Sep 17 00:00:00 2001 From: Pavlo Solntsev Date: Mon, 17 Dec 2018 19:09:46 -0600 Subject: [PATCH 1/2] CI: Fixing PostgreSQL service * CI file was modified to remove DB definition * Fixing access of potentially NULL object with a function that doesn't accept this. --- .gitlab-ci.yml | 13 +++--- providers/postgres/gda-postgres-ddl.c | 27 ++++--------- tests/ddl/check-ddl-creator-postgresql.c | 50 ++++++++++++++---------- tests/test-cnc-utils.c | 42 +++++++------------- 4 files changed, 59 insertions(+), 73 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f40a6b46e..37478c89b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,15 +5,14 @@ image: ubuntu:devel services: - - postgres:latest + - postgres stages: - - build + - build variables: - POSTGRES_DB: test POSTGRES_USER: test - POSTGRES_PASSWORD: "test1" + POSTGRES_PASSWORD: test1 DEPENDENCIES: gcc gettext gtk-doc-tools make autoconf meson ninja-build libgtk-3-dev libxml2-dev gnome-common @@ -41,8 +40,8 @@ variables: postgresql-client-common GIT_SUBMODULE_STRATEGY: normal - POSTGRESQL_DBCREATE_PARAMS: "DB_NAME=test;HOST=postgres;USERNAME=test;PASSWORD=test1" - POSTGRESQL_CNC_PARAMS: "DB_NAME=test;HOST=postgres;USERNAME=test;PASSWORD=test1" + POSTGRESQL_DBCREATE_PARAMS: "HOST=postgres;PORT=5432;ADM_LOGIN=test;ADM_PASSWORD='test1'" + POSTGRESQL_CNC_PARAMS: "HOST=postgres;USERNAME=test;PASSWORD='test1'" before_script: - apt update && apt -y install $DEPENDENCIES @@ -72,6 +71,8 @@ autotools_build: meson_build: stage: build script: + - export PGPASSWORD=$POSTGRES_PASSWORD + - psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT 'OK' AS status;" - meson _build --prefix=/usr -Denable-ci-environment=true - cd _build - ninja diff --git a/providers/postgres/gda-postgres-ddl.c b/providers/postgres/gda-postgres-ddl.c index 2307ac763..b2f0bbd11 100644 --- a/providers/postgres/gda-postgres-ddl.c +++ b/providers/postgres/gda-postgres-ddl.c @@ -87,18 +87,13 @@ gda_postgres_render_DROP_DB (GdaServerProvider *provider, GdaConnection *cnc, { GString *string; gchar *sql = NULL; - gchar *tmp; + GValue *value = NULL; string = g_string_new ("DROP DATABASE "); - tmp = gda_connection_operation_get_sql_identifier_at (cnc, op, "/DB_DESC_P/DB_NAME", error); - if (!tmp) { - g_string_free (string, TRUE); - return NULL; - } - - g_string_append (string, tmp); - g_free (tmp); + value = gda_server_operation_get_value_at (op, "/DB_DESC_P/DB_NAME"); + if (value && G_VALUE_HOLDS (value, G_TYPE_STRING) && g_value_get_string(value)) + g_string_append (string, g_value_get_string (value)); sql = string->str; g_string_free (string, FALSE); @@ -428,20 +423,14 @@ gda_postgres_render_DROP_TABLE (GdaServerProvider *provider, GdaConnection *cn GString *string; const GValue *value; gchar *sql = NULL; - gchar *tmp; - string = g_string_new ("DROP TABLE "); + string = g_string_new ("DROP TABLE IF EXISTS "); - tmp = gda_connection_operation_get_sql_identifier_at (cnc, op, - "/TABLE_DESC_P/TABLE_NAME", error); - if (!tmp) { - g_string_free (string, TRUE); - return NULL; + value = gda_server_operation_get_value_at (op, "/TABLE_DESC_P/TABLE_NAME"); + if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) { + g_string_append (string, g_value_get_string (value)); } - g_string_append (string, tmp); - g_free (tmp); - value = gda_server_operation_get_value_at (op, "/TABLE_DESC_P/REFERENCED_ACTION"); if (value && G_VALUE_HOLDS (value, G_TYPE_STRING)) { g_string_append_c (string, ' '); diff --git a/tests/ddl/check-ddl-creator-postgresql.c b/tests/ddl/check-ddl-creator-postgresql.c index 57ccadb0b..202fde344 100644 --- a/tests/ddl/check-ddl-creator-postgresql.c +++ b/tests/ddl/check-ddl-creator-postgresql.c @@ -33,7 +33,9 @@ typedef struct { -static void create_users_table (CheckDdlObject *self) { +static void +create_users_table (CheckDdlObject *self) +{ GError *error = NULL; gboolean res = FALSE; GdaDdlTable *table = NULL; @@ -101,7 +103,9 @@ static void create_users_table (CheckDdlObject *self) { g_assert_true (res); } -static void create_companies_table (CheckDdlObject *self) { +static void +create_companies_table (CheckDdlObject *self) +{ GError *error = NULL; gboolean res = FALSE; GdaDdlTable *table = NULL; @@ -170,7 +174,8 @@ static void create_companies_table (CheckDdlObject *self) { } -static void create_countries_table (CheckDdlObject *self) { +static void create_countries_table (CheckDdlObject *self) +{ GError *error = NULL; gboolean res = FALSE; GdaDdlTable *table = NULL; @@ -247,23 +252,26 @@ test_ddl_creator_start (CheckDdlObject *self, self->cnc = NULL; self->started_db = FALSE; self->cont = FALSE; - -#ifdef CI_ENVIRONMENT - const gchar *cnc_string = "DB_NAME=test;HOST=postgres;USERNAME=test;PASSWORD=test1"; -#else - const gchar *cnc_string = "DB_NAME=test;HOST=localhost;USERNAME=test;PASSWORD=test1"; -#endif - - self->cnc = gda_connection_new_from_string("Postgresql", - cnc_string, - NULL, - GDA_CONNECTION_OPTIONS_NONE, - NULL); - if (self->cnc == NULL) { - g_print ("Postgres test not run, please setup a database 'test', owned by 'test' role with password 'test1' at localhost\n"); - g_print ("Test Skip.\n"); - return; - } + const gchar *cnc_string = NULL; + + cnc_string = g_getenv ("POSTGRES_CNC_PARAMS"); + + if (cnc_string) + { + self->cnc = gda_connection_new_from_string("Postgresql", + cnc_string, + NULL, + GDA_CONNECTION_OPTIONS_NONE, + NULL); + } + else + { + g_print ("Postgres test not run\n"); + g_print ("Please set the variable POSTGRES_CNC_PARAMS with an appropriate user, host, and database\n"); + g_print ("Test Skip.\n"); + return; + } + } g_assert_nonnull (self->cnc); @@ -283,7 +291,7 @@ test_ddl_creator_start (CheckDdlObject *self, static void test_ddl_creator_finish (CheckDdlObject *self, - gconstpointer user_data) + gconstpointer user_data) { if (self->cnc != NULL) { gda_connection_close(self->cnc,NULL); diff --git a/tests/test-cnc-utils.c b/tests/test-cnc-utils.c index 3bd2b1d56..a6b9c4828 100644 --- a/tests/test-cnc-utils.c +++ b/tests/test-cnc-utils.c @@ -133,38 +133,24 @@ test_cnc_open_connection (const gchar *provider, const gchar *dbname, GError **e data.requested_db_name ? data.requested_db_name : dbname); g_print ("Open connection string: %s\n", data.string->str); - gchar *auth_string = NULL; - GSList *current = gda_set_get_holders (prov_info->auth_params); - while (current) { - GdaHolder *holder = (GdaHolder *) current->data; - - const gchar *id = gda_holder_get_id (holder); - const gchar *env = NULL; - if (g_strrstr (id, "USER") != NULL) { - str = g_strdup_printf ("%s_USER", upname); - env = getenv (str); - g_free (str); - } else if (g_strrstr (id, "PASS") != NULL) { - str = g_strdup_printf ("%s_PASS", upname); - env = getenv (str); - g_free (str); - } + GString *auth_string = g_string_new (""); - if (env) { - str = g_strdup_printf ("%s=%s;", id, env); + const gchar *qlvalue = gda_quark_list_find (cnc_quark_list,"USERNAME"); - gchar *tmp = auth_string; - auth_string = g_strconcat (auth_string, str, NULL); - g_free (str); - g_free (tmp); - } + if (qlvalue) + g_string_append_printf (auth_string,"USERNAME=%s;",qlvalue); + + qlvalue = gda_quark_list_find (cnc_quark_list,"PASSWORD"); - current = g_slist_next (current); - } + if (qlvalue) + g_string_append_printf (auth_string,"PASSWORD=%s;",qlvalue); + + g_message ("Connection string: %s\n",data.string->str); + g_message ("Auth string: %s\n",auth_string->str); - cnc = gda_connection_open_from_string (prov_info->id, data.string->str, auth_string, + cnc = gda_connection_open_from_string (prov_info->id, data.string->str, auth_string->str, GDA_CONNECTION_OPTIONS_NONE, error); - g_free (auth_string); + g_string_free (auth_string,TRUE); g_string_free (data.string, TRUE); } @@ -226,6 +212,7 @@ test_cnc_setup_connection (const gchar *provider, const gchar *dbname, GError ** str = g_strdup_printf ("%s_DBCREATE_PARAMS", upname); db_params = getenv (str); g_free (str); + g_message ("Creating database - step\n"); if (db_params) { GdaServerOperation *op; @@ -242,6 +229,7 @@ test_cnc_setup_connection (const gchar *provider, const gchar *dbname, GError ** db_created = TRUE; } + g_message ("Opening connection\n"); /* open connection to database */ cnc = test_cnc_open_connection (provider, dbname, error); -- GitLab From 91118864b836f0c897d76870d7d90bf53d3d766d Mon Sep 17 00:00:00 2001 From: Pavlo Solntsev Date: Tue, 18 Dec 2018 16:01:52 -0600 Subject: [PATCH 2/2] CI: Fixing password string --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 37478c89b..e495e2ce1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -40,8 +40,8 @@ variables: postgresql-client-common GIT_SUBMODULE_STRATEGY: normal - POSTGRESQL_DBCREATE_PARAMS: "HOST=postgres;PORT=5432;ADM_LOGIN=test;ADM_PASSWORD='test1'" - POSTGRESQL_CNC_PARAMS: "HOST=postgres;USERNAME=test;PASSWORD='test1'" + POSTGRESQL_DBCREATE_PARAMS: "HOST=postgres;PORT=5432;ADM_LOGIN=test;ADM_PASSWORD=test1" + POSTGRESQL_CNC_PARAMS: "HOST=postgres;USERNAME=test;PASSWORD=test1" before_script: - apt update && apt -y install $DEPENDENCIES -- GitLab