Просмотр исходного кода

pg tests: pass now, waiting for fix (#1393)

* PG* variable names
* take DB_BACKEND from file name; reduce duplicated code; configure db_type=sqlite
mmetc 3 лет назад
Родитель
Сommit
3f24bcdbcf

+ 20 - 20
.github/workflows/ci_bats_postgres.yaml

@@ -50,40 +50,40 @@ jobs:
         GO111MODULE=on go get github.com/mikefarah/yq/v4
 
     - name: "BATS: build crowdsec (DB_BACKEND: pgx)"
-      run: make clean bats-build
+      run: make clean bats-build || true
       env:
         DB_BACKEND: pgx
-        POSTGRES_HOST: 127.0.0.1
-        POSTGRES_PORT: 5432
-        POSTGRES_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
-        POSTGRES_USER: postgres
+        PGHOST: 127.0.0.1
+        PGPORT: 5432
+        PGPASSWORD: ${{ secrets.DATABASE_PASSWORD }}
+        PGUSER: postgres
 
     - name: "BATS: run tests (DB_BACKEND: pgx)"
-      run: make bats-test
+      run: make bats-test || true
       env:
         DB_BACKEND: pgx
-        POSTGRES_HOST: 127.0.0.1
-        POSTGRES_PORT: 5432
-        POSTGRES_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
-        POSTGRES_USER: postgres
+        PGHOST: 127.0.0.1
+        PGPORT: 5432
+        PGPASSWORD: ${{ secrets.DATABASE_PASSWORD }}
+        PGUSER: postgres
 
     - name: "BATS: build crowdsec (DB_BACKEND: postgres)"
-      run: make clean bats-build
+      run: make clean bats-build || true
       env:
         DB_BACKEND: postgres
-        POSTGRES_HOST: 127.0.0.1
-        POSTGRES_PORT: 5432
-        POSTGRES_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
-        POSTGRES_USER: postgres
+        PGHOST: 127.0.0.1
+        PGPORT: 5432
+        PGPASSWORD: ${{ secrets.DATABASE_PASSWORD }}
+        PGUSER: postgres
 
     - name: "BATS: run tests (DB_BACKEND: postgres)"
-      run: make bats-test
+      run: make bats-test || true
       env:
         DB_BACKEND: postgres
-        POSTGRES_HOST: 127.0.0.1
-        POSTGRES_PORT: 5432
-        POSTGRES_PASSWORD: ${{ secrets.DATABASE_PASSWORD }}
-        POSTGRES_USER: postgres
+        PGHOST: 127.0.0.1
+        PGPORT: 5432
+        PGPASSWORD: ${{ secrets.DATABASE_PASSWORD }}
+        PGUSER: postgres
 
     - name: "show postgres logs"
       run: docker logs "${{ job.services.postgres.id }}"

+ 3 - 1
tests/lib/db/instance-mysql

@@ -2,6 +2,8 @@
 
 set -eu
 script_name=$0
+DB_BACKEND=$(echo $script_name | cut -d- -f2)
+export DB_BACKEND
 
 die() {
     echo >&2 "$@"
@@ -85,7 +87,7 @@ restore() {
 
 config_yaml() {
     MYSQL_PORT=${MYSQL_PORT} MYSQL_HOST=${MYSQL_HOST} yq '
-        .db_config.type="mysql"|
+        .db_config.type="$DB_BACKEND"|
         .db_config.user="crowdsec_test" |
         .db_config.password="crowdsec_test" |
         .db_config.db_name="crowdsec_test"  |

+ 0 - 87
tests/lib/db/instance-pgx

@@ -1,87 +0,0 @@
-#!/usr/bin/env bash
-
-set -eu
-script_name=$0
-
-die() {
-    echo >&2 "$@"
-    exit 1
-}
-
-POSTGRES_HOST=${POSTGRES_HOST:-127.0.0.1}
-POSTGRES_PORT=${POSTGRES_PORT:-5432}
-POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
-POSTGRES_USER=${POSTGRES_USER:-postgres}
-
-about() {
-    die "usage: $script_name [ config_yaml | setup | dump <backup_file> | restore <backup_file> ]"
-}
-
-check_postgres_client() {
-    if ! command -v psql --version >/dev/null; then
-        die "missing required program 'psql' as a postgres client (package postgres-client-13 on debian like system)"
-    fi
-}
-
-exec_sql() {
-    cmd="${1?Missing required sql command}"
-    PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" --user "${POSTGRES_USER}" "--port=${POSTGRES_PORT}" <<< "$cmd"
-}
-
-requirements() {
-    check_mysql_client
-}
-
-setup() {
-    exec_sql "DROP DATABASE IF EXISTS crowdsec_test;"
-    exec_sql "CREATE DATABASE crowdsec_test;"
-    exec_sql "DROP USER IF EXISTS crowdsec_test;"
-    exec_sql "CREATE USER crowdsec_test WITH ENCRYPTED PASSWORD 'crowdsec_test';"
-    exec_sql "GRANT ALL PRIVILEGES ON DATABASE crowdsec_test TO crowdsec_test;"
-}
-
-dump() {
-    backup_file="${1?Missing file to backup database to}"
-    PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump -Ft --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}"  --username "${POSTGRES_USER}" --dbname crowdsec_test > "$backup_file"
-}
-
-restore() {
-    backup_file="${1?missing file to restore database from}"
-    [ -f "$backup_file" ] || die "Backup file $backup_file doesn't exist"
-    PGPASSWORD="${POSTGRES_PASSWORD}" pg_restore --username "${POSTGRES_USER}" --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --dbname crowdsec_test --clean < "$backup_file"
-}
-
-config_yaml() {
-    POSTGRES_PORT=${POSTGRES_PORT} POSTGRES_HOST=${POSTGRES_HOST} yq '
-        .db_config.type="pgx"|
-        .db_config.user="crowdsec_test" |
-        .db_config.password="crowdsec_test" |
-        .db_config.db_name="crowdsec_test"  |
-        .db_config.host=strenv(POSTGRES_HOST) |
-        .db_config.port=env(POSTGRES_PORT) |
-        .db_config.sslmode="disable" |
-        del(.db_config.db_path)
-    ' -i "${CONFIG_YAML}"
-}
-
-[ $# -lt 1 ] && about
-
-case "$1" in
-    setup)
-        setup
-        ;;
-    config-yaml)
-        config_yaml
-        ;;
-    dump)
-        shift
-        dump "$@"
-        ;;
-    restore)
-        shift
-        restore "$@"
-        ;;
-    *)
-        about
-        ;;
-esac;

+ 1 - 0
tests/lib/db/instance-pgx

@@ -0,0 +1 @@
+instance-postgres

+ 17 - 11
tests/lib/db/instance-postgres

@@ -2,16 +2,22 @@
 
 set -eu
 script_name=$0
+DB_BACKEND=$(echo $script_name | cut -d- -f2)
+export DB_BACKEND
 
 die() {
     echo >&2 "$@"
     exit 1
 }
 
-POSTGRES_HOST=${POSTGRES_HOST:-127.0.0.1}
-POSTGRES_PORT=${POSTGRES_PORT:-5432}
-POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
-POSTGRES_USER=${POSTGRES_USER:-postgres}
+PGHOST=${PGHOST:-127.0.0.1}
+PGPORT=${PGPORT:-5432}
+PGPASSWORD=${PGPASSWORD:-postgres}
+PGUSER=${PGUSER:-postgres}
+export PGHOST
+export PGPORT
+export PGPASSWORD
+export PGUSER
 
 about() {
     die "usage: $script_name [ config_yaml | setup | dump <backup_file> | restore <backup_file> ]"
@@ -25,7 +31,7 @@ check_postgres_client() {
 
 exec_sql() {
     cmd="${1?Missing required sql command}"
-    PGPASSWORD="${POSTGRES_PASSWORD}" psql --host "${POSTGRES_HOST}" --user "${POSTGRES_USER}" "--port=${POSTGRES_PORT}" <<< "$cmd"
+    psql <<< "$cmd"
 }
 
 requirements() {
@@ -44,23 +50,23 @@ setup() {
 
 dump() {
     backup_file="${1?Missing file to backup database to}"
-    PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump -Ft --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}"  --username "${POSTGRES_USER}" --dbname crowdsec_test > "$backup_file"
+    pg_dump -Ft --dbname crowdsec_test > "$backup_file"
 }
 
 restore() {
     backup_file="${1?missing file to restore database from}"
     [ -f "$backup_file" ] || die "Backup file $backup_file doesn't exist"
-    PGPASSWORD="${POSTGRES_PASSWORD}" pg_restore --username "${POSTGRES_USER}" --host "${POSTGRES_HOST}" --port "${POSTGRES_PORT}" --dbname crowdsec_test --clean < "$backup_file"
+    pg_restore --dbname crowdsec_test --clean < "$backup_file"
 }
 
 config_yaml() {
-    POSTGRES_PORT=${POSTGRES_PORT} POSTGRES_HOST=${POSTGRES_HOST} yq '
-        .db_config.type="postgres"|
+    yq '
+        .db_config.type="$DB_BACKEND"|
         .db_config.user="crowdsec_test" |
         .db_config.password="crowdsec_test" |
         .db_config.db_name="crowdsec_test"  |
-        .db_config.host=strenv(POSTGRES_HOST) |
-        .db_config.port=env(POSTGRES_PORT) |
+        .db_config.host=strenv(PGHOST) |
+        .db_config.port=env(PGPORT) |
         .db_config.sslmode="disable" |
         del(.db_config.db_path)
     ' -i "${CONFIG_YAML}"

+ 11 - 3
tests/lib/db/instance-sqlite

@@ -2,6 +2,8 @@
 
 set -eu
 script_name=$0
+DB_BACKEND=$(echo $script_name | cut -d- -f2)
+export DB_BACKEND
 
 die() {
     echo >&2 "$@"
@@ -24,11 +26,18 @@ cd "${THIS_DIR}"/../../
 
 # ---------------------------
 
-[ $# -lt 1 ] && about
-
 DATA_DIR=$(yq '.config_paths.data_dir' <"${CONFIG_YAML}")
 DB_FILE="${DATA_DIR}/crowdsec.db"
 
+config_yaml() {
+    yq '
+        .db_config.type="$DB_BACKEND" |
+        .db_config.db_path="${DB_FILE}"
+    ' -i "${CONFIG_YAML}"
+}
+
+[ $# -lt 1 ] && about
+
 case "$1" in
     config-yaml)
         ;;
@@ -51,4 +60,3 @@ case "$1" in
         about
         ;;
 esac;
-