diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd58d91..8c1d8dd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,6 +106,11 @@ jobs: name: Migration tests runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + db: [sqlite, postgres, mysql, mariadb] + steps: - name: Set up Go 1.x uses: actions/setup-go@v2 @@ -116,5 +121,4 @@ jobs: - name: Check out code into the Go module directory uses: actions/checkout@v2 - - name: Run sqlite - run: ./testing/run_api_tests.sh sqlite --migration + - run: ./testing/run_api_tests.sh ${{ matrix.db }} --migration diff --git a/.gitignore b/.gitignore index 34c07e3..f99d391 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ build *.zip config*.yml !config.default.yml -!testing/config.testing.yml +!testing/config.*.yml pkged.go package-lock.json -node_modules \ No newline at end of file +node_modules diff --git a/main.go b/main.go index f724c46..5c03342 100644 --- a/main.go +++ b/main.go @@ -132,6 +132,7 @@ func main() { // Connect to database var err error + logbuch.Info("starting with %s database", config.Db.Dialect) db, err = gorm.Open(config.Db.GetDialector(), &gorm.Config{Logger: gormLogger}, conf.GetWakapiDBOpts(&config.Db)) if err != nil { logbuch.Error(err.Error()) diff --git a/testing/config.mysql.yml b/testing/config.mysql.yml new file mode 100644 index 0000000..f4b7ad9 --- /dev/null +++ b/testing/config.mysql.yml @@ -0,0 +1,38 @@ +env: production + +server: + listen_ipv4: 127.0.0.1 + listen_ipv6: + tls_cert_path: + tls_key_path: + port: 3000 + base_path: / + public_url: http://localhost:3000 + +app: + aggregation_time: '02:15' + report_time_weekly: 'fri,18:00' + heartbeat_max_age: 87600h # 10 years + inactive_days: 7 + custom_languages: + vue: Vue + jsx: JSX + svelte: Svelte + +db: + host: 127.0.0.1 + port: 3306 + user: wakapi + password: wakapi + name: wakapi + dialect: mysql + max_conn: 2 + ssl: false + automgirate_fail_silently: false + +security: + password_salt: + insecure_cookies: true + cookie_max_age: 172800 + allow_signup: true + expose_metrics: true diff --git a/testing/config.postgres.yml b/testing/config.postgres.yml new file mode 100644 index 0000000..0b5c672 --- /dev/null +++ b/testing/config.postgres.yml @@ -0,0 +1,39 @@ +env: production + +server: + listen_ipv4: 127.0.0.1 + listen_ipv6: + tls_cert_path: + tls_key_path: + port: 3000 + base_path: / + public_url: http://localhost:3000 + +app: + aggregation_time: '02:15' + report_time_weekly: 'fri,18:00' + heartbeat_max_age: 87600h # 10 years + inactive_days: 7 + custom_languages: + vue: Vue + jsx: JSX + svelte: Svelte + +db: + host: 127.0.0.1 + port: 5432 + user: wakapi + password: wakapi + name: wakapi + dialect: postgres + charset: + max_conn: 2 + ssl: false + automgirate_fail_silently: false + +security: + password_salt: + insecure_cookies: true + cookie_max_age: 172800 + allow_signup: true + expose_metrics: true diff --git a/testing/config.testing.yml b/testing/config.sqlite.yml similarity index 100% rename from testing/config.testing.yml rename to testing/config.sqlite.yml diff --git a/testing/docker-compose.yml b/testing/docker-compose.yml new file mode 100644 index 0000000..5ee6f0c --- /dev/null +++ b/testing/docker-compose.yml @@ -0,0 +1,42 @@ +version: '3.7' + +services: + postgres: + image: postgres:15 + environment: + POSTGRES_USER: "wakapi" + POSTGRES_PASSWORD: "wakapi" + POSTGRES_DB: "wakapi" + ports: + - "5432:5432" + volumes: + - wakapi-postgres:/var/lib/postgresql/data + + mysql: + image: mysql:8 + environment: + MYSQL_USER: "wakapi" + MYSQL_PASSWORD: "wakapi" + MYSQL_DATABASE: "wakapi" + MYSQL_ROOT_PASSWORD: example + ports: + - "3306:3306" + volumes: + - wakapi-mysql:/var/lib/mysql + + mariadb: + image: mariadb:10 + environment: + MARIADB_USER: "wakapi" + MARIADB_PASSWORD: "wakapi" + MARIADB_DATABASE: "wakapi" + MARIADB_ROOT_PASSWORD: example + ports: + - "3306:3306" + volumes: + - wakapi-mariadb:/var/lib/mysql + +volumes: + wakapi-postgres: {} + wakapi-mysql: {} + wakapi-mariadb: {} diff --git a/testing/run_api_tests.sh b/testing/run_api_tests.sh index 447c6fb..e82bc7c 100755 --- a/testing/run_api_tests.sh +++ b/testing/run_api_tests.sh @@ -10,7 +10,6 @@ for i in "$@"; do case $i in --migration) MIGRATION=1 - shift ;; esac done @@ -37,6 +36,24 @@ fi # Initialise test data case $1 in + postgres|mysql|mariadb) + docker compose -f "$script_dir/docker-compose.yml" down + docker volume rm "testing_wakapi-$1" + + docker_down=1 + docker compose -f "$script_dir/docker-compose.yml" up --wait -d "$1" + if [ "$1" == "mariadb" ]; then + config="config.mysql.yml" + else + config="config.$1.yml" + fi + sleep 5 + + if [ "$1" == "mysql" ]; then + sleep 10 + fi + ;; + sqlite|*) rm -f wakapi_testing.db @@ -46,7 +63,7 @@ case $1 in echo "Importing seed data ..." sqlite3 wakapi_testing.db < data.sql - config="config.testing.yml" + config="config.sqlite.yml" ;; esac @@ -69,13 +86,18 @@ wait_for_wakapi () { # Run tests echo "Running Wakapi testing instance in background ..." +echo "Configuration file: $config" "$initial_run_exe" -config "$config" & pid=$! wait_for_wakapi -echo "Running test collection ..." -newman run "wakapi_api_tests.postman_collection.json" -exit_code=$? +if [ "$1" == "sqlite" ]; then + echo "Running test collection ..." + newman run "wakapi_api_tests.postman_collection.json" + exit_code=$? +else + exit_code=0 +fi echo "Shutting down Wakapi ..." kill -TERM $pid @@ -91,5 +113,9 @@ if [[ $MIGRATION -eq 1 ]]; then kill -TERM $pid fi +if [ "$docker_down" -eq 1 ]; then + docker compose -f "$script_dir/docker-compose.yml" down +fi + echo "Exiting with status $exit_code" exit $exit_code