Skip to content

Commit bdb1845

Browse files
committed
ci
1 parent 8c874a4 commit bdb1845

38 files changed

Lines changed: 349 additions & 497 deletions

.github/workflows/codeql-analysis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ jobs:
1313

1414
steps:
1515
- name: Checkout repo
16-
uses: actions/checkout@v3
16+
uses: actions/checkout@v6
1717

1818
- name: Initialize CodeQL
19-
uses: github/codeql-action/init@v1
19+
uses: github/codeql-action/init@v4
2020
with:
2121
languages: 'go'
2222

2323
- name: CodeQL Analysis
24-
uses: github/codeql-action/analyze@v1
24+
uses: github/codeql-action/analyze@v4

.github/workflows/test.yml

Lines changed: 22 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
name: Test
2-
3-
on: [push, pull_request]
1+
name: 'test'
2+
#on:
3+
# pull_request:
4+
# paths: ['**.go', 'go.mod', '.github/workflows/*']
5+
# push:
6+
# branches: ['main']
47

58
jobs:
69
staticcheck:
@@ -12,183 +15,27 @@ jobs:
1215
with: {version: '2025.1.1'}
1316

1417
test:
15-
runs-on: ubuntu-latest
18+
runs-on: 'ubuntu-latest'
1619
strategy:
1720
fail-fast: false
1821
matrix:
19-
postgres: ['17', '16', '15', '14']
20-
go: ['1.25', '1.18']
22+
#pg: ['14', '15', '16', '17']
23+
#go: ['1.18', '1.25']
24+
pg: ['17']
25+
go: ['1.25']
2126
steps:
22-
- name: setup postgres pre-reqs
23-
run: |
24-
mkdir init
25-
cat <<CONF > init/root.crt
26-
-----BEGIN CERTIFICATE-----
27-
MIIEBjCCAu6gAwIBAgIJAPizR+OD14YnMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV
28-
BAYTAlVTMQ8wDQYDVQQIDAZOZXZhZGExEjAQBgNVBAcMCUxhcyBWZWdhczEaMBgG
29-
A1UECgwRZ2l0aHViLmNvbS9saWIvcHExDjAMBgNVBAMMBXBxIENBMB4XDTIxMDkw
30-
MjAxNTUwMloXDTMxMDkwMzAxNTUwMlowXjELMAkGA1UEBhMCVVMxDzANBgNVBAgM
31-
Bk5ldmFkYTESMBAGA1UEBwwJTGFzIFZlZ2FzMRowGAYDVQQKDBFnaXRodWIuY29t
32-
L2xpYi9wcTEOMAwGA1UEAwwFcHEgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
33-
ggEKAoIBAQDb9d6sjdU6GdibGrXRMOHREH3MRUS8T4TFqGgPEGVDP/V5bAZlBSGP
34-
AN0o9DTyVLcbQpBt8zMTw9KeIzIIe5NIVkSmA16lw/YckGhOM+kZIkiDuE6qt5Ia
35-
OQCRMdXkZ8ejG/JUu+rHU8FJZL8DE+jyYherzdjkeVAQ7JfzxAwW2Dl7T/47g337
36-
Pwmf17AEb8ibSqmXyUN7R5NhJQs+hvaYdNagzdx91E1H+qlyBvmiNeasUQljLvZ+
37-
Y8wAuU79neA+d09O4PBiYwV17rSP6SZCeGE3oLZviL/0KM9Xig88oB+2FmvQ6Zxa
38-
L7SoBlqS+5pBZwpH7eee/wCIKAnJtMAJAgMBAAGjgcYwgcMwDwYDVR0TAQH/BAUw
39-
AwEB/zAdBgNVHQ4EFgQUfIXEczahbcM2cFrwclJF7GbdajkwgZAGA1UdIwSBiDCB
40-
hYAUfIXEczahbcM2cFrwclJF7GbdajmhYqRgMF4xCzAJBgNVBAYTAlVTMQ8wDQYD
41-
VQQIDAZOZXZhZGExEjAQBgNVBAcMCUxhcyBWZWdhczEaMBgGA1UECgwRZ2l0aHVi
42-
LmNvbS9saWIvcHExDjAMBgNVBAMMBXBxIENBggkA+LNH44PXhicwDQYJKoZIhvcN
43-
AQELBQADggEBABFyGgSz2mHVJqYgX1Y+7P+MfKt83cV2uYDGYvXrLG2OGiCilVul
44-
oTBG+8omIMSHOsQZvWMpA5H0tnnlQHrKpKpUyKkSL+Wv5GL0UtBmHX7mVRiaK2l4
45-
q2BjRaQUitp/FH4NSdXtVrMME5T1JBBZHsQkNL3cNRzRKwY/Vj5UGEDxDS7lILUC
46-
e01L4oaK0iKQn4beALU+TvKoAHdPvoxpPpnhkF5ss9HmdcvRktJrKZemDJZswZ7/
47-
+omx8ZPIYYUH5VJJYYE88S7guAt+ZaKIUlel/t6xPbo2ZySFSg9u1uB99n+jTo3L
48-
1rAxFnN3FCX2jBqgP29xMVmisaN5k04UmyI=
49-
-----END CERTIFICATE-----
50-
CONF
51-
cat <<CONF > init/server.crt
52-
-----BEGIN CERTIFICATE-----
53-
MIIDqzCCApOgAwIBAgIJAPiewLrOyYipMA0GCSqGSIb3DQEBCwUAMF4xCzAJBgNV
54-
BAYTAlVTMQ8wDQYDVQQIDAZOZXZhZGExEjAQBgNVBAcMCUxhcyBWZWdhczEaMBgG
55-
A1UECgwRZ2l0aHViLmNvbS9saWIvcHExDjAMBgNVBAMMBXBxIENBMB4XDTIxMDkw
56-
MjAxNTUwMloXDTMxMDkwMzAxNTUwMlowTjELMAkGA1UEBhMCVVMxDzANBgNVBAgM
57-
Bk5ldmFkYTESMBAGA1UEBwwJTGFzIFZlZ2FzMRowGAYDVQQKDBFnaXRodWIuY29t
58-
L2xpYi9wcTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKf6H4UzmANN
59-
QiQJe92Mf3ETMYmpZKNNO9DPEHyNLIkag+XwMrBTdcCK0mLvsNCYpXuBN6703KCd
60-
WAFOeMmj7gOsWtvjt5Xm6bRHLgegekXzcG/jDwq/wyzeDzr/YkITuIlG44Lf9lhY
61-
FLwiHlHOWHnwrZaEh6aU//02aQkzyX5INeXl/3TZm2G2eIH6AOxOKOU27MUsyVSQ
62-
5DE+SDKGcRP4bElueeQWvxAXNMZYb7sVSDdfHI3zr32K4k/tC8x0fZJ5XN/dvl4t
63-
4N4MrYlmDO5XOrb/gQH1H4iu6+5EMDfZYab4fkThnNFdfFqu4/8Scv7KZ8mWqpKM
64-
fGAjEPctQi0CAwEAAaN8MHowHQYDVR0OBBYEFENExPbmDyFB2AJUdbMvVyhlNPD5
65-
MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMBMGA1UdEQQMMAqCCHBvc3RncmVzMCwG
66-
CWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTANBgkq
67-
hkiG9w0BAQsFAAOCAQEAMRVbV8RiEsmp9HAtnVCZmRXMIbgPGrqjeSwk586s4K8v
68-
BSqNCqxv6s5GfCRmDYiqSqeuCVDtUJS1HsTmbxVV7Ke71WMo+xHR1ICGKOa8WGCb
69-
TGsuicG5QZXWaxeMOg4s0qpKmKko0d1aErdVsanU5dkrVS7D6729Ffnzu4lwApk6
70-
invAB67p8u7sojwqRq5ce0vRaG+YFylTrWomF9kauEb8gKbQ9Xc7QfX+h+UH/mq9
71-
Nvdj8LOHp6/82bZdnsYUOtV4lS1IA/qzeXpqBphxqfWabD1yLtkyJyImZKq8uIPp
72-
0CG4jhObPdWcCkXD6bg3QK3mhwlC79OtFgxWmldCRQ==
73-
-----END CERTIFICATE-----
74-
CONF
75-
cat <<CONF > init/server.key
76-
-----BEGIN PRIVATE KEY-----
77-
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCn+h+FM5gDTUIk
78-
CXvdjH9xEzGJqWSjTTvQzxB8jSyJGoPl8DKwU3XAitJi77DQmKV7gTeu9NygnVgB
79-
TnjJo+4DrFrb47eV5um0Ry4HoHpF83Bv4w8Kv8Ms3g86/2JCE7iJRuOC3/ZYWBS8
80-
Ih5Rzlh58K2WhIemlP/9NmkJM8l+SDXl5f902ZthtniB+gDsTijlNuzFLMlUkOQx
81-
PkgyhnET+GxJbnnkFr8QFzTGWG+7FUg3XxyN8699iuJP7QvMdH2SeVzf3b5eLeDe
82-
DK2JZgzuVzq2/4EB9R+IruvuRDA32WGm+H5E4ZzRXXxaruP/EnL+ymfJlqqSjHxg
83-
IxD3LUItAgMBAAECggEAOE2naQ9tIZYw2EFxikZApVcooJrtx6ropMnzHbx4NBB2
84-
K4mChAXFj184u77ZxmGT/jzGvFcI6LE0wWNbK0NOUV7hKZk/fPhkV3AQZrAMrAu4
85-
IVi7PwAd3JkmA8F8XuebUDA5rDGDsgL8GD9baFJA58abeLs9eMGyuF4XgOUh4bip
86-
hgHa76O2rcDWNY5HZqqRslw75FzlYkB0PCts/UJxSswj70kTTihyOhDlrm2TnyxI
87-
ne54UbGRrpfs9wiheSGLjDG81qZToBHQDwoAnjjZhu1VCaBISuGbgZrxyyRyqdnn
88-
xPW+KczMv04XyvF7v6Pz+bUEppalLXGiXnH5UtWvZQKBgQDTPCdMpNE/hwlq4nAw
89-
Kf42zIBWfbnMLVWYoeDiAOhtl9XAUAXn76xe6Rvo0qeAo67yejdbJfRq3HvGyw+q
90-
4PS8r9gXYmLYIPQxSoLL5+rFoBCN3qFippfjLB1j32mp7+15KjRj8FF2r6xIN8fu
91-
XatSRsaqmvCWYLDRv/rbHnxwkwKBgQDLkyfFLF7BtwtPWKdqrwOM7ip1UKh+oDBS
92-
vkCQ08aEFRBU7T3jChsx5GbaW6zmsSBwBwcrHclpSkz7n3aq19DDWObJR2p80Fma
93-
rsXeIcvtEpkvT3pVX268P5d+XGs1kxgFunqTysG9yChW+xzcs5MdKBzuMPPn7rL8
94-
MKAzdar6PwKBgEypkzW8x3h/4Moa3k6MnwdyVs2NGaZheaRIc95yJ+jGZzxBjrMr
95-
h+p2PbvU4BfO0AqOkpKRBtDVrlJqlggVVp04UHvEKE16QEW3Xhr0037f5cInX3j3
96-
Lz6yXwRFLAsR2aTUzWjL6jTh8uvO2s/GzQuyRh3a16Ar/WBShY+K0+zjAoGATnLT
97-
xZjWnyHRmu8X/PWakamJ9RFzDPDgDlLAgM8LVgTj+UY/LgnL9wsEU6s2UuP5ExKy
98-
QXxGDGwUhHar/SQTj+Pnc7Mwpw6HKSOmnnY5po8fNusSwml3O9XppEkrC0c236Y/
99-
7EobJO5IFVTJh4cv7vFxTJzSsRL8KFD4uzvh+nMCgYEAqY8NBYtIgNJA2B6C6hHF
100-
+bG7v46434ZHFfGTmMQwzE4taVg7YRnzYESAlvK4bAP5ZXR90n7GRGFhrXzoMZ38
101-
r0bw/q9rV+ReGda7/Bjf7ciCKiq0RODcHtf4IaskjPXCoQRGJtgCPLhWPfld6g9v
102-
/HTvO96xv9e3eG/PKSPog94=
103-
-----END PRIVATE KEY-----
104-
CONF
105-
cat <<CONF > init/hba.sh
106-
cat <<EOF > /var/lib/postgresql/data/pg_hba.conf
107-
local all all trust
108-
host all postgres all trust
109-
hostnossl all pqgossltest all reject
110-
hostnossl all pqgosslcert all reject
111-
hostssl all pqgossltest all trust
112-
hostssl all pqgosslcert all cert
113-
host all all all trust
114-
EOF
115-
CONF
116-
sudo chown 999:999 ./init/*
117-
sudo chmod 600 ./init/*
118-
119-
- name: start postgres
120-
run: |
121-
docker run -d \
122-
--name pg \
123-
-p 5432:5432 \
124-
-v $(pwd)/init:/init \
125-
-e POSTGRES_PASSWORD=unused \
126-
-e POSTGRES_USER=postgres \
127-
postgres:${{ matrix.postgres }} \
128-
-c ssl=on \
129-
-c ssl_ca_file=/init/root.crt \
130-
-c ssl_cert_file=/init/server.crt \
131-
-c ssl_key_file=/init/server.key
132-
133-
- name: configure postgres
134-
run: |
135-
n=0
136-
until [ "$n" -ge 10 ]
137-
do
138-
docker exec pg pg_isready -h localhost && break
139-
n=$((n+1))
140-
echo waiting for postgres to be ready...
141-
sleep 1
142-
done
143-
docker exec pg bash /init/hba.sh
144-
n=0
145-
until [ "$n" -ge 10 ]
146-
do
147-
docker exec pg su postgres -c '/usr/lib/postgresql/${{ matrix.postgres }}/bin/pg_ctl reload' && break
148-
n=$((n+1))
149-
echo waiting for postgres to reload...
150-
sleep 1
151-
done
152-
153-
- name: setup hosts
154-
run: echo '127.0.0.1 postgres' | sudo tee -a /etc/hosts
155-
156-
- name: create db/roles
157-
run: |
158-
n=0
159-
until [ "$n" -ge 10 ]
160-
do
161-
docker exec pg pg_isready -h localhost && break
162-
n=$((n+1))
163-
echo waiting for postgres to be ready...
164-
sleep 1
165-
done
166-
docker exec pg createdb -h localhost -U postgres pqgotest
167-
docker exec pg createuser -h localhost -U postgres -DRS pqgossltest
168-
docker exec pg createuser -h localhost -U postgres -DRS pqgosslcert
169-
170-
- name: check out code into the Go module directory
171-
uses: actions/checkout@v6
172-
173-
- name: set up go
174-
uses: actions/setup-go@v6
27+
- uses: 'actions/checkout@v6'
28+
- uses: 'actions/setup-go@v6'
17529
with:
17630
go-version: ${{ matrix.go }}
177-
id: go
178-
179-
- name: set key perms
180-
run: sudo chmod 600 testdata/certs/postgresql.key
181-
182-
- name: run tests
183-
env:
184-
PGUSER: postgres
185-
PGHOST: localhost
186-
PGPORT: 5432
187-
PQGOSSLTESTS: 1
188-
PQSSLCERTTEST_PATH: testdata/certs
31+
- name: 'run tests'
32+
#env:
33+
# PGUSER: 'postgres'
34+
# PGHOST: 'localhost'
35+
# PGPORT: '5432'
36+
# PQGOSSLTESTS: '1'
37+
# PQSSLCERTTEST_PATH: 'testdata/certs'
18938
run: |
190-
PQTEST_BINARY_PARAMETERS=no go test -race ./...
39+
docker compose up pg${{ matrix.pg }} -d --wait || exit 1
40+
PQTEST_BINARY_PARAMETERS=no go test -race ./...
19141
PQTEST_BINARY_PARAMETERS=yes go test -race ./...
192-
193-
- name: build
194-
run: go build -v .

README.md

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,50 @@ Install with:
2323

2424
## Tests
2525

26-
`go test` is used for testing. See [TESTS.md](TESTS.md) for more details.
26+
## Running Tests
27+
28+
Default connect:
29+
30+
defaultTo("PGDATABASE", "pqgo")
31+
defaultTo("PGUSER", "pqgo")
32+
defaultTo("PGSSLMODE", "disable")
33+
defaultTo("PGCONNECT_TIMEOUT", "20")
34+
35+
/etc/hosts needs:
36+
37+
127.0.0.1 postgres
38+
39+
Needs roles:
40+
41+
create role pqgossltest with login nocreatedb nocreaterole nosuperuser;
42+
create role pqgosslcert with login nocreatedb nocreaterole nosuperuser;
43+
44+
45+
<!--
46+
`go test` is used for testing. A running PostgreSQL
47+
server is required, with the ability to log in. The
48+
database to connect to test with is `pqgo` on
49+
"localhost" but these can be overridden using [environment
50+
variables](https://www.postgresql.org/docs/9.3/static/libpq-envars.html).
51+
52+
Example:
53+
54+
PGHOST=/run/postgresql go test
55+
56+
## Benchmarks
57+
58+
A benchmark suite can be run as part of the tests:
59+
60+
go test -bench .
61+
62+
## Example setup (Docker)
63+
64+
Run a postgres container:
65+
66+
docker run --expose 5432:5432 postgres
67+
68+
Run tests:
69+
70+
PGHOST=localhost PGPORT=5432 PGUSER=postgres PGSSLMODE=disable PGDATABASE=postgres go test
71+
72+
-->

TESTS.md

Lines changed: 0 additions & 33 deletions
This file was deleted.

array_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"reflect"
99
"strings"
1010
"testing"
11+
12+
"github.com/lib/pq/internal/pqtest"
1113
)
1214

1315
func TestParseArray(t *testing.T) {
@@ -1605,7 +1607,7 @@ func BenchmarkGenericArrayValueStrings(b *testing.B) {
16051607
}
16061608

16071609
func TestArrayScanBackend(t *testing.T) {
1608-
db := openTestConn(t)
1610+
db := pqtest.MustDB(t)
16091611
defer db.Close()
16101612

16111613
for _, tt := range []struct {
@@ -1630,7 +1632,7 @@ func TestArrayScanBackend(t *testing.T) {
16301632
}
16311633

16321634
func TestArrayValueBackend(t *testing.T) {
1633-
db := openTestConn(t)
1635+
db := pqtest.MustDB(t)
16341636
defer db.Close()
16351637

16361638
for _, tt := range []struct {

bench_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"testing"
1717
"time"
1818

19+
"github.com/lib/pq/internal/pqtest"
1920
"github.com/lib/pq/oid"
2021
)
2122

@@ -36,7 +37,7 @@ func BenchmarkSelectSeries(b *testing.B) {
3637

3738
func benchQuery(b *testing.B, query string, result any) {
3839
b.StopTimer()
39-
db := openTestConn(b)
40+
db := pqtest.MustDB(b)
4041
defer db.Close()
4142
b.StartTimer()
4243

@@ -183,7 +184,7 @@ func BenchmarkPreparedSelectSeries(b *testing.B) {
183184

184185
func benchPreparedQuery(b *testing.B, query string, result any) {
185186
b.StopTimer()
186-
db := openTestConn(b)
187+
db := pqtest.MustDB(b)
187188
defer db.Close()
188189
stmt, err := db.Prepare(query)
189190
if err != nil {
@@ -345,7 +346,7 @@ func BenchmarkDecodeBool(b *testing.B) {
345346
}
346347

347348
func TestDecodeBool(t *testing.T) {
348-
db := openTestConn(t)
349+
db := pqtest.MustDB(t)
349350
rows, err := db.Query("select true")
350351
if err != nil {
351352
t.Fatal(err)
@@ -416,7 +417,7 @@ func BenchmarkLocationCacheMultiThread(b *testing.B) {
416417
func BenchmarkResultParsing(b *testing.B) {
417418
b.StopTimer()
418419

419-
db := openTestConn(b)
420+
db := pqtest.MustDB(b)
420421
defer db.Close()
421422
_, err := db.Exec("BEGIN")
422423
if err != nil {

compose.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: 'pqgo'
2+
3+
services:
4+
pg17:
5+
image: 'postgres:17'
6+
ports: ['127.0.0.1:5432:5432']
7+
entrypoint: '/init/entry.bash'
8+
volumes: ['./testdata/init:/init']
9+
shm_size: '128mb'
10+
environment:
11+
'POSTGRES_DATABASE': 'pqgo'
12+
'POSTGRES_USER': 'pqgo'
13+
'POSTGRES_PASSWORD': 'unused'

0 commit comments

Comments
 (0)