Skip to content

Commit 45126ca

Browse files
committed
test(bats): generate coverage info during end-to-end tests
For the bats-test target, build and use a specific binary with the -cover option For the test target, generate coverage information in the same directory as e2e with test.gocoverdir Signed-off-by: Daniel Vérité <[email protected]>
1 parent 350ce6e commit 45126ca

File tree

7 files changed

+50
-27
lines changed

7 files changed

+50
-27
lines changed

Makefile

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ BUILD_INFO_PACKAGE_PATH=github.com/qonto/postgresql-partition-manager/internal/i
33
BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
44
GIT_COMMIT_SHA=$(shell git rev-parse HEAD)
55
BINARY=postgresql-partition-manager
6+
COVER_BINARY=test-postgresql-partition-manager
67
ARCHITECTURE=$(shell uname -m)
78
HELM_CHART_NAME=postgresql-partition-manager-chart
89
RELEASE_VERSION=$(shell jq .tag dist/metadata.json)
@@ -18,6 +19,10 @@ format:
1819
build:
1920
CGO_ENABLED=0 go build -v -ldflags="-X '$(BUILD_INFO_PACKAGE_PATH).Version=development' -X '$(BUILD_INFO_PACKAGE_PATH).CommitSHA=$(GIT_COMMIT_SHA)' -X '$(BUILD_INFO_PACKAGE_PATH).Date=$(BUILD_DATE)'" -o $(BINARY)
2021

22+
# build for coverage
23+
$(COVER_BINARY): build
24+
CGO_ENABLED=0 go build -cover -v -ldflags="-X '$(BUILD_INFO_PACKAGE_PATH).Version=development' -X '$(BUILD_INFO_PACKAGE_PATH).CommitSHA=$(GIT_COMMIT_SHA)' -X '$(BUILD_INFO_PACKAGE_PATH).Date=$(BUILD_DATE)'" -o $(COVER_BINARY)
25+
2126
.PHONY: run
2227
run:
2328
./$(BINARY) $(args)
@@ -26,9 +31,9 @@ run:
2631
install: build
2732
GOBIN=/usr/local/bin/ go install -v -ldflags="-X '$(BUILD_INFO_PACKAGE_PATH).Version=development' -X '$(BUILD_INFO_PACKAGE_PATH).CommitSHA=$(GIT_COMMIT_SHA)' -X '$(BUILD_INFO_PACKAGE_PATH).Date=$(BUILD_DATE)'"
2833

29-
.PHONY: bats-test
30-
bats-test:
31-
cd scripts/bats && bats *.bats
34+
bats-test: $(COVER_BINARY)
35+
test -d ./coverage-data || mkdir ./coverage-data
36+
cd scripts/bats && GOCOVERDIR=$(PWD)/coverage-data bats *.bats
3237

3338
.PHONY: helm-test
3439
helm-test:
@@ -60,7 +65,9 @@ checkcov:
6065

6166
.PHONY: test
6267
test:
63-
go test -race -v ./... -coverprofile=coverage.txt -covermode atomic
68+
test -d ./coverage-data || mkdir ./coverage-data
69+
go test -v ./... -cover -test.gocoverdir=$(PWD)/coverage-data -covermode set
70+
go tool covdata textfmt -i=./coverage-data -o coverage.txt
6471
go run github.com/boumenot/gocover-cobertura@latest < coverage.txt > coverage.xml
6572
go tool cover -html coverage.txt -o cover.html
6673

scripts/bats/00_cli.bats

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1+
load 'test/libs/startup'
2+
13
setup() {
2-
bats_load_library bats-support
3-
bats_load_library bats-assert
4+
bats_load_library bats-support
5+
bats_load_library bats-assert
6+
ppm_setup
47
}
58

69
@test "Test returns its version" {
7-
run postgresql-partition-manager --version
10+
run "$PPM_PROG" --version
811

912
assert_success
1013
assert_output --partial "postgresql-partition-manager version development"
1114
}
1215

1316
@test "Test help message" {
14-
run postgresql-partition-manager --help
17+
run "$PPM_PROG" --help
1518

1619
assert_success
1720
assert_output --partial "Simplified PostgreSQL partitioning management"

scripts/bats/10_validate.bats

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
load 'test/libs/startup'
2+
13
setup() {
24
bats_load_library bats-support
35
bats_load_library bats-assert
6+
ppm_setup
47
}
58

69
# Test for program's behavior when the configuration file is empty
710
@test "Program should exit when passed an empty configuration file" {
8-
run postgresql-partition-manager validate -c /dev/null
11+
run "$PPM_PROG" validate -c /dev/null
912

1013
assert_failure
1114
assert_equal "$status" 1
@@ -15,7 +18,7 @@ setup() {
1518
}
1619

1720
@test "Ensure validate command executes successfully with a valid configuration file" {
18-
run postgresql-partition-manager validate -c configuration/valid.yaml
21+
run "$PPM_PROG" validate -c configuration/valid.yaml
1922

2023
assert_success
2124
assert_output --partial "Configuration is valid"

scripts/bats/20_check.bats

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
load 'test/libs/startup'
12
load 'test/libs/dependencies'
23
load 'test/libs/partitions'
34
load 'test/libs/seeds'
@@ -10,10 +11,11 @@ setup_file() {
1011
setup() {
1112
bats_load_library bats-support
1213
bats_load_library bats-assert
14+
ppm_setup
1315
}
1416

1517
@test "Test exit code on PostgreSQL connection error" {
16-
run postgresql-partition-manager run check -c configuration/valid.yaml --connection-url an-invalid-connection-url
18+
run "$PPM_PROG" run check -c configuration/valid.yaml --connection-url an-invalid-connection-url
1719

1820
assert_failure
1921
assert_equal "$status" 3
@@ -43,7 +45,7 @@ EOF
4345
)
4446
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
4547

46-
run postgresql-partition-manager run check -c ${CONFIGURATION_FILE}
48+
run "$PPM_PROG" run check -c ${CONFIGURATION_FILE}
4749

4850
assert_success
4951
assert_output --partial "All partitions are correctly configured"
@@ -73,7 +75,7 @@ EOF
7375
)
7476
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
7577

76-
run postgresql-partition-manager run check -c ${CONFIGURATION_FILE}
78+
run "$PPM_PROG" run check -c ${CONFIGURATION_FILE}
7779

7880
assert_failure
7981
assert_output --partial "Found missing tables"
@@ -103,7 +105,7 @@ EOF
103105
)
104106
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
105107

106-
run postgresql-partition-manager run check -c ${CONFIGURATION_FILE}
108+
run "$PPM_PROG" run check -c ${CONFIGURATION_FILE}
107109

108110
assert_failure
109111
assert_output --partial "Found missing tables"
@@ -141,7 +143,7 @@ EOF
141143
)
142144
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
143145

144-
PPM_WORK_DATE="2025-02-10" run postgresql-partition-manager run check -c ${CONFIGURATION_FILE}
146+
PPM_WORK_DATE="2025-02-10" run "$PPM_PROG" run check -c ${CONFIGURATION_FILE}
145147

146148
assert_success
147149
assert_output --partial "All partitions are correctly configured"

scripts/bats/30_provisioning.bats

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
load 'test/libs/startup'
12
load 'test/libs/dependencies'
23
load 'test/libs/partitions'
34
load 'test/libs/seeds'
@@ -11,6 +12,7 @@ setup_file() {
1112
setup() {
1213
bats_load_library bats-support
1314
bats_load_library bats-assert
15+
ppm_setup
1416
}
1517

1618
@test "Test that provisioning succeed on up-to-date partitioning" {
@@ -36,7 +38,7 @@ EOF
3638
)
3739
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
3840

39-
run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
41+
run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
4042

4143
assert_success
4244
assert_output --partial "All partitions are correctly provisioned"
@@ -68,7 +70,7 @@ EOF
6870
)
6971
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
7072

71-
run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
73+
run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
7274

7375
assert_success
7476
assert_output --partial "All partitions are correctly provisioned"
@@ -82,7 +84,7 @@ EOF
8284
yq eval ".partitions.unittest.retention = ${NEW_RETENTION}" -i ${CONFIGURATION_FILE}
8385
yq eval ".partitions.unittest.preProvisioned = ${NEW_PREPROVISIONED}" -i ${CONFIGURATION_FILE}
8486

85-
run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
87+
run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
8688

8789
assert_success
8890
assert_output --partial "All partitions are correctly provisioned"
@@ -118,7 +120,7 @@ EOF
118120

119121
cat ${CONFIGURATION_FILE}
120122

121-
run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
123+
run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
122124

123125
assert_success
124126
assert_output --partial "All partitions are correctly provisioned"
@@ -153,7 +155,7 @@ EOF
153155
)
154156
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
155157

156-
run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
158+
run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
157159

158160

159161
assert_success
@@ -189,7 +191,7 @@ EOF
189191
)
190192
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
191193

192-
run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
194+
run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
193195

194196
assert_success
195197
assert_output --partial "All partitions are correctly provisioned"
@@ -222,7 +224,7 @@ EOF
222224
)
223225
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
224226

225-
PPM_WORK_DATE="2025-01-20" run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
227+
PPM_WORK_DATE="2025-01-20" run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
226228
assert_success
227229
assert_output --partial "All partitions are correctly provisioned"
228230

@@ -242,7 +244,7 @@ EOF
242244
yq eval ".partitions.unittest.retention = 2" -i ${CONFIGURATION_FILE}
243245
yq eval ".partitions.unittest.preProvisioned = 10" -i ${CONFIGURATION_FILE}
244246

245-
PPM_WORK_DATE="2025-02-01" run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
247+
PPM_WORK_DATE="2025-02-01" run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
246248
assert_success
247249

248250
local expected_mix=$(cat <<EOF
@@ -290,7 +292,7 @@ EOF
290292
create_partitioned_table "table_unittest1"
291293
create_partitioned_table "table_unittest2"
292294

293-
PPM_WORK_DATE="2025-02-01" run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
295+
PPM_WORK_DATE="2025-02-01" run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
294296
assert_success
295297

296298
local expected1=$(cat <<'EOF'
@@ -344,7 +346,7 @@ EOF
344346

345347
create_partitioned_table "${TABLE}"
346348

347-
PPM_WORK_DATE="2025-02-01" run postgresql-partition-manager run provisioning -c ${CONFIGURATION_FILE}
349+
PPM_WORK_DATE="2025-02-01" run "$PPM_PROG" run provisioning -c ${CONFIGURATION_FILE}
348350

349351
# The status must reflect the fact that one partition set failed
350352
[ "$status" -eq 4 ] # PartitionsProvisioningFailedExitCode

scripts/bats/40_cleanup.bats

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
load 'test/libs/startup'
12
load 'test/libs/dependencies'
23
load 'test/libs/partitions'
34
load 'test/libs/seeds'
@@ -10,6 +11,7 @@ setup_file() {
1011
setup() {
1112
bats_load_library bats-support
1213
bats_load_library bats-assert
14+
ppm_setup
1315
}
1416

1517
@test "Test that useless partitions are removed by the cleanup" {
@@ -46,7 +48,7 @@ EOF
4648
)
4749
local CONFIGURATION_FILE=$(generate_configuration_file "${CONFIGURATION}")
4850

49-
run postgresql-partition-manager run cleanup -c ${CONFIGURATION_FILE}
51+
run "$PPM_PROG" run cleanup -c ${CONFIGURATION_FILE}
5052

5153
assert_success
5254
assert_output --partial "All partitions are cleaned"
@@ -99,7 +101,7 @@ EOF
99101
# When run on 2025-03-15 with a retention of 1 month, the partition for 2024-12
100102
# is old enough to be dropped. But since 2025-01 is missing, it is an error that
101103
# should prevent the drop.
102-
PPM_WORK_DATE="2025-03-15" run postgresql-partition-manager run cleanup -c ${CONFIGURATION_FILE}
104+
PPM_WORK_DATE="2025-03-15" run "$PPM_PROG" run cleanup -c ${CONFIGURATION_FILE}
103105

104106
assert_failure
105107
assert_output --partial 'level=ERROR msg="Partition Gap"'

scripts/bats/test/libs/startup.bash

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ppm_setup() {
2+
DIR="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
3+
PPM_PROG="$DIR/../../test-postgresql-partition-manager"
4+
}

0 commit comments

Comments
 (0)