Skip to content

Commit 6485aed

Browse files
authored
Respect env var overrides for db credentials in tests (#185)
* Respect env var overrides for db credentials in tests * Apply CI improvements from postgres-nio * Oops, a little too much copy pasta for dinner * Attempt to fix timeout in macOS tests
1 parent 0b7a43c commit 6485aed

File tree

2 files changed

+89
-86
lines changed

2 files changed

+89
-86
lines changed

.github/workflows/test.yml

Lines changed: 85 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,112 @@
11
name: test
2-
on:
3-
pull_request:
4-
push:
5-
branches:
6-
- main
2+
on: [ 'pull_request' ]
3+
74
jobs:
85
linux:
9-
runs-on: ubuntu-latest
106
strategy:
117
fail-fast: false
128
matrix:
13-
runner:
14-
- swift:5.2-xenial
15-
- swift:5.2-bionic
16-
- swift:5.2-focal
17-
- swift:5.2-centos7
18-
- swift:5.2-centos8
19-
- swift:5.2-amazonlinux2
20-
- swift:5.3-xenial
21-
- swift:5.3-bionic
22-
- swift:5.3-focal
23-
- swift:5.3-centos7
24-
- swift:5.3-centos8
25-
- swift:5.3-amazonlinux2
26-
- swift:5.4-bionic
27-
- swift:5.4-focal
28-
- swift:5.4-centos7
29-
- swift:5.4-centos8
30-
- swift:5.4-amazonlinux2
31-
- swiftlang/swift:nightly-5.5-focal
32-
- swiftlang/swift:nightly-5.5-centos8
33-
- swiftlang/swift:nightly-5.5-amazonlinux2
34-
- swiftlang/swift:nightly-main-focal
35-
- swiftlang/swift:nightly-main-centos8
36-
- swiftlang/swift:nightly-main-amazonlinux2
37-
dbimage:
38-
- postgres:11
39-
- postgres:12
9+
dbimage:
10+
- postgres:14
4011
- postgres:13
41-
container: ${{ matrix.runner }}
12+
- postgres:12
13+
- postgres:11
14+
dbauth:
15+
- trust
16+
- md5
17+
- scram-sha-256
18+
swiftver:
19+
- swift:5.2
20+
- swift:5.5
21+
- swiftlang/swift:nightly-main
22+
swiftos:
23+
- focal
24+
container: ${{ format('{0}-{1}', matrix.swiftver, matrix.swiftos) }}
25+
runs-on: ubuntu-latest
26+
env:
27+
LOG_LEVEL: debug
28+
POSTGRES_DB: 'vapor_database'
29+
POSTGRES_DATABASE: 'vapor_database'
30+
POSTGRES_DATABASE_A: 'vapor_database'
31+
POSTGRES_DATABASE_B: 'vapor_database'
32+
POSTGRES_USER: 'vapor_username'
33+
POSTGRES_USERNAME: 'vapor_username'
34+
POSTGRES_USERNAME_A: 'vapor_username'
35+
POSTGRES_USERNAME_B: 'vapor_username'
36+
POSTGRES_PASSWORD: 'vapor_password'
37+
POSTGRES_PASSWORD_A: 'vapor_password'
38+
POSTGRES_PASSWORD_B: 'vapor_password'
39+
POSTGRES_HOSTNAME_A: 'psql-a'
40+
POSTGRES_HOSTNAME_B: 'psql-b'
41+
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.dbauth }}
4242
services:
43-
postgres-a:
43+
psql-a:
4444
image: ${{ matrix.dbimage }}
45-
env:
46-
POSTGRES_USER: vapor_username
47-
POSTGRES_PASSWORD: vapor_password
48-
POSTGRES_DB: vapor_database
49-
postgres-b:
45+
env:
46+
POSTGRES_USER: 'vapor_username'
47+
POSTGRES_DB: 'vapor_database'
48+
POSTGRES_PASSWORD: 'vapor_password'
49+
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.dbauth }}
50+
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.dbauth }}
51+
psql-b:
5052
image: ${{ matrix.dbimage }}
5153
env:
52-
POSTGRES_USER: vapor_username
53-
POSTGRES_PASSWORD: vapor_password
54-
POSTGRES_DB: vapor_database
55-
env:
56-
POSTGRES_HOSTNAME_A: postgres-a
57-
POSTGRES_HOSTNAME_B: postgres-b
58-
LOG_LEVEL: info
54+
POSTGRES_USER: 'vapor_username'
55+
POSTGRES_DB: 'vapor_database'
56+
POSTGRES_PASSWORD: 'vapor_password'
57+
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.dbauth }}
58+
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.dbauth }}
5959
steps:
60-
- name: Workaround SPM incompatibility with old Git on CentOS 7
61-
if: ${{ contains(matrix.runner, 'centos7') }}
62-
run: |
63-
yum install -y make libcurl-devel
64-
git clone https://github.com/git/git -bv2.28.0 --depth 1 && cd git
65-
make prefix=/usr -j all install NO_OPENSSL=1 NO_EXPAT=1 NO_TCLTK=1 NO_GETTEXT=1 NO_PERL=1
66-
- name: Checkout code
60+
- name: Check out package
6761
uses: actions/checkout@v2
68-
- name: Run tests with Thread Sanitizer
69-
run: swift test --enable-test-discovery --sanitize=thread
70-
macOS:
62+
- name: Run unit tests
63+
run: swift test --enable-test-discovery
64+
65+
macos-all:
7166
strategy:
7267
fail-fast: false
7368
matrix:
74-
include:
75-
- formula: postgresql@11
76-
datadir: postgresql@11
77-
- formula: postgresql@12
78-
datadir: postgres
69+
dbimage:
70+
- postgresql@14
71+
- postgresql@13
72+
dbauth:
73+
- scram-sha-256
7974
xcode:
80-
- latest
8175
- latest-stable
76+
- latest
77+
runs-on: macos-11
8278
env:
83-
POSTGRES_DATABASE_A: vapor_database_a
84-
POSTGRES_DATABASE_B: vapor_database_b
85-
runs-on: macos-latest
79+
LOG_LEVEL: debug
80+
POSTGRES_HOSTNAME_A: 127.0.0.1
81+
POSTGRES_HOSTNAME_B: 127.0.0.1
82+
POSTGRES_USERNAME_A: 'vapor_username'
83+
POSTGRES_USERNAME_B: 'vapor_username'
84+
POSTGRES_PASSWORD_A: 'vapor_password'
85+
POSTGRES_PASSWORD_B: 'vapor_password'
86+
POSTGRES_DATABASE_A: 'vapor_database_a'
87+
POSTGRES_DATABASE_B: 'vapor_database_b'
88+
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.dbauth }}
8689
steps:
8790
- name: Select latest available Xcode
8891
uses: maxim-lobanov/setup-xcode@v1
89-
with:
92+
with:
9093
xcode-version: ${{ matrix.xcode }}
91-
- name: Replace Postgres install and start server
94+
- name: Install Postgres, setup DB and auth, and wait for server start
9295
run: |
93-
brew uninstall --force postgresql php && rm -rf /usr/local/{etc,var}/{postgres,pg}*
94-
brew install ${{ matrix.formula }} && brew link --force ${{ matrix.formula }}
95-
initdb --locale=C -E UTF-8 $(brew --prefix)/var/${{ matrix.datadir }}
96-
brew services start ${{ matrix.formula }}
97-
- name: Wait for server to be ready
98-
run: until pg_isready; do sleep 1; done
96+
export PATH="$(brew --prefix)/opt/${{ matrix.dbimage }}/bin:$PATH" PGDATA=/tmp/vapor-postgres-test PGUSER=postgres
97+
brew install ${{ matrix.dbimage }}
98+
initdb --locale=C --auth-host ${{ matrix.dbauth }} --username=postgres --pwfile=<(echo postgres)
99+
pg_ctl start --wait
100+
psql postgres <<<"CREATE ROLE $POSTGRES_USERNAME_A LOGIN PASSWORD '$POSTGRES_PASSWORD_A';"
101+
psql postgres <<<"CREATE ROLE $POSTGRES_USERNAME_B LOGIN PASSWORD '$POSTGRES_PASSWORD_B';"
102+
psql postgres <<<"CREATE DATABASE $POSTGRES_DATABASE_A OWNER = $POSTGRES_USERNAME_A;"
103+
psql postgres <<<"CREATE DATABASE $POSTGRES_DATABASE_B OWNER = $POSTGRES_USERNAME_B;"
104+
psql $POSTGRES_DATABASE_A <<<"ALTER SCHEMA public OWNER TO $POSTGRES_USERNAME_A;"
105+
psql $POSTGRES_DATABASE_B <<<"ALTER SCHEMA public OWNER TO $POSTGRES_USERNAME_B;"
99106
timeout-minutes: 2
100-
- name: Setup users and databases for Postgres
101-
run: |
102-
createuser --createdb --login vapor_username
103-
for db in vapor_database_{a,b}; do
104-
createdb -Ovapor_username $db && psql $db <<<"ALTER SCHEMA public OWNER TO vapor_username;"
105-
done
106107
- name: Checkout code
107108
uses: actions/checkout@v2
108-
- name: Run tests with Thread Sanitizer
109-
run: swift test --enable-test-discovery --sanitize=thread
109+
- name: Run all tests
110+
run: |
111+
swift test --enable-test-discovery -Xlinker -rpath \
112+
-Xlinker $(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.5/macosx

Tests/FluentPostgresDriverTests/FluentPostgresDriverTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ final class FluentPostgresDriverTests: XCTestCase {
136136
let configuration = PostgresConfiguration(
137137
hostname: env("POSTGRES_HOSTNAME_A") ?? "localhost",
138138
port: env("POSTGRES_PORT_A").flatMap(Int.init) ?? PostgresConfiguration.ianaPortNumber,
139-
username: "vapor_username",
140-
password: "vapor_password",
139+
username: env("POSTGRES_USERNAME_A") ?? "vapor_username",
140+
password: env("POSTGRES_PASSWORD_A") ?? "vapor_password",
141141
database: env("POSTGRES_DATABASE_A") ?? "vapor_database"
142142
)
143143
self.dbs.use(.postgres(
@@ -198,8 +198,8 @@ final class FluentPostgresDriverTests: XCTestCase {
198198
self.threadPool = NIOThreadPool(numberOfThreads: System.coreCount)
199199
self.dbs = Databases(threadPool: threadPool, on: self.eventLoopGroup)
200200

201-
self.dbs.use(.postgres(configuration: aConfig), as: .a)
202-
self.dbs.use(.postgres(configuration: bConfig), as: .b)
201+
self.dbs.use(.postgres(configuration: aConfig, connectionPoolTimeout: .seconds(30)), as: .a)
202+
self.dbs.use(.postgres(configuration: bConfig, connectionPoolTimeout: .seconds(30)), as: .b)
203203

204204
let a = self.dbs.database(.a, logger: Logger(label: "test.fluent.a"), on: self.eventLoopGroup.next())
205205
_ = try (a as! PostgresDatabase).query("drop schema public cascade").wait()

0 commit comments

Comments
 (0)