Skip to content

Commit c730e61

Browse files
authored
test: Add initial e2e tests (#360)
Blocked by #361. Added Docker e2e tests running using the CAPI e2e test utilities, clusters being created, waiting for all nodes to become ready, etc. tests include both Calico and Cilium deployed via both ClusterResourceSet and HelmAddon strategies. we can add more tests but this is a good start. ~There is a data race in the test libraries which I don't know how to work around but it does not affect the usefulness of these tests and we can look at that later, unless someone knows what the problem is?~ Disabled race in ginkgo call, I think this is OK, it doesn't show races in deployed code only in tests.
1 parent 120c8c5 commit c730e61

File tree

25 files changed

+1533
-246
lines changed

25 files changed

+1533
-246
lines changed

.github/workflows/checks.yml

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,24 @@ jobs:
5656

5757
e2e-test:
5858
runs-on: ubuntu-22.04
59+
permissions:
60+
checks: write
61+
strategy:
62+
matrix:
63+
PROVIDER:
64+
- Docker
5965
steps:
6066
- name: Check out code
6167
uses: actions/checkout@v4
62-
63-
- name: "Check e2e tests exist"
64-
id: check_e2e_tests_exist
65-
uses: andstor/file-existence-action@v3
6668
with:
67-
files: "test/e2e/**"
69+
fetch-depth: 0
6870

69-
- if: steps.check_e2e_tests_exist.outputs.files_exists == 'true'
70-
name: Install devbox
71+
- name: Install devbox
7172
uses: jetpack-io/[email protected]
7273
with:
7374
enable-cache: true
7475

75-
- if: steps.check_e2e_tests_exist.outputs.files_exists == 'true'
76-
name: Go cache
76+
- name: Go cache
7777
uses: actions/cache@v4
7878
with:
7979
path: |
@@ -83,21 +83,18 @@ jobs:
8383
restore-keys: |
8484
${{ runner.os }}-go-
8585
86-
- if: steps.check_e2e_tests_exist.outputs.files_exists == 'true'
87-
name: Build and install on KinD
88-
run: devbox run -- make dev.run-on-kind
86+
- name: Run e2e tests
87+
run: devbox run -- make e2e-test E2E_FOCUS='\[${{ matrix.PROVIDER }}\]'
8988
env:
9089
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
9190

92-
- if: steps.check_e2e_tests_exist.outputs.files_exists == 'true'
93-
name: Run e2e tests
94-
run: devbox run -- make e2e-test
95-
env:
96-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
97-
98-
- if: steps.check_e2e_tests_exist.outputs.files_exists == 'true' && always()
99-
name: Cleanup KinD cluster
100-
run: devbox run -- make kind.delete
91+
- if: success() || failure() # always run even if the previous step fails
92+
name: Publish e2e test report
93+
uses: mikepenz/action-junit-report@v4
94+
with:
95+
report_paths: 'junit-e2e.xml'
96+
check_name: 'e2e test report'
97+
detailed_summary: true
10198

10299
lint-go:
103100
runs-on: ubuntu-22.04

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,5 @@ node_modules/
3939

4040
/cluster.yaml
4141
/runtime-extension-components.yaml
42+
/_artifacts/
43+
test/e2e/config/cre-envsubst.yaml

.golangci.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ run:
77
# Although this is actually in api/external, api is a go module
88
# and so need to specify the dir relative to the module root.
99
- external
10+
build-tags:
11+
- e2e
1012

1113
linters:
1214
disable-all: true
@@ -73,6 +75,11 @@ linters-settings:
7375
extra-rules: true
7476
lll:
7577
line-length: 120
78+
stylecheck:
79+
# https://staticcheck.io/docs/configuration/options/#dot_import_whitelist
80+
dot-import-whitelist:
81+
- github.com/onsi/ginkgo/v2
82+
- github.com/onsi/gomega
7683

7784
issues:
7885
exclude-rules:

.goreleaser.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ release:
3030
before:
3131
hooks:
3232
- |
33-
sh -ec 'if [ {{ .IsSnapshot }} != true ]; then
34-
cat <<EOF > runtime-extension-components.yaml
33+
sh -ec 'cat <<EOF > runtime-extension-components.yaml
3534
apiVersion: v1
3635
kind: Namespace
3736
metadata:
38-
name: capi-runtime-extensions-system
39-
$(helm template capi-runtime-extensions ./charts/capi-runtime-extensions \
40-
--namespace capi-runtime-extensions-system \
37+
name: {{.ProjectName}}-system
38+
$(helm template {{.ProjectName}} ./charts/{{.ProjectName}} \
39+
--namespace {{.ProjectName}}-system \
4140
--set-string image.tag={{ .Version }} \
41+
{{ if .IsSnapshot }}--set-string image.repository=ko.local/{{ .ProjectName }}{{ end }} \
4242
)
43-
EOF
44-
fi'
43+
EOF'
44+
- sed -i 's/\${/$${/g' runtime-extension-components.yaml
4545

4646
builds:
4747
- id: capi-runtime-extensions
@@ -72,7 +72,7 @@ builds:
7272
sh -ec 'if [ {{ .IsSnapshot }} == true ] && [ {{ .Runtime.Goarch }} == {{ .Arch }} ]; then
7373
env GOOS=linux GOARCH={{ .Arch }} \
7474
SOURCE_DATE_EPOCH=$(date +%s) \
75-
KO_DOCKER_REPO=ko.local/capi-runtime-extensions \
75+
KO_DOCKER_REPO=ko.local/{{ .ProjectName }} \
7676
ko build \
7777
--bare \
7878
-t {{ .Version }} \
@@ -100,7 +100,7 @@ kos:
100100
- -X 'k8s.io/component-base/version/verflag.programName={{ .ProjectName }}'
101101
labels:
102102
org.opencontainers.image.created: "{{ .CommitDate }}"
103-
org.opencontainers.image.title: capi-runtime-extensions
103+
org.opencontainers.image.title: "{{ .ProjectName }}"
104104
org.opencontainers.image.revision: "{{ .FullCommit }}"
105105
org.opencontainers.image.version: v{{trimprefix .Version "v"}}
106106
org.opencontainers.image.source: "{{ .GitURL }}"

capi-runtime-extensions.code-workspace

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
}
1515
],
1616
"settings": {
17-
"go.buildTags": "e2e"
17+
"go.buildTags": "e2e",
1818
}
1919
}

go.mod

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ require (
1515
github.com/d2iq-labs/capi-runtime-extensions/api v0.0.0-00010101000000-000000000000
1616
github.com/d2iq-labs/capi-runtime-extensions/common v0.0.0-00010101000000-000000000000
1717
github.com/go-logr/logr v1.4.1
18+
github.com/onsi/ginkgo/v2 v2.15.0
1819
github.com/onsi/gomega v1.31.1
1920
github.com/spf13/pflag v1.0.5
2021
github.com/stretchr/testify v1.8.4
@@ -26,71 +27,119 @@ require (
2627
k8s.io/component-base v0.29.2
2728
k8s.io/klog/v2 v2.120.1
2829
k8s.io/kubelet v0.29.2
29-
k8s.io/utils v0.0.0-20230726121419-3b25d923346b
30+
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
3031
sigs.k8s.io/cluster-api v1.6.1
32+
sigs.k8s.io/cluster-api-addon-provider-helm v0.1.1-alpha.1
33+
sigs.k8s.io/cluster-api/test v1.6.1
3134
sigs.k8s.io/controller-runtime v0.17.1
3235
)
3336

3437
require (
38+
github.com/BurntSushi/toml v1.3.2 // indirect
3539
github.com/MakeNowJust/heredoc v1.0.0 // indirect
40+
github.com/Masterminds/goutils v1.1.1 // indirect
41+
github.com/Masterminds/semver/v3 v3.2.1 // indirect
42+
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
43+
github.com/Microsoft/go-winio v0.6.1 // indirect
44+
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect
45+
github.com/adrg/xdg v0.4.0 // indirect
46+
github.com/alessio/shellescape v1.4.1 // indirect
3647
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect
3748
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect
3849
github.com/avast/retry-go/v4 v4.5.1 // indirect
3950
github.com/beorn7/perks v1.0.1 // indirect
4051
github.com/cespare/xxhash/v2 v2.2.0 // indirect
52+
github.com/cloudflare/circl v1.3.7 // indirect
4153
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
54+
github.com/distribution/reference v0.5.0 // indirect
55+
github.com/docker/distribution v2.8.3+incompatible // indirect
56+
github.com/docker/docker v24.0.7+incompatible // indirect
57+
github.com/docker/go-connections v0.4.0 // indirect
58+
github.com/docker/go-units v0.5.0 // indirect
59+
github.com/drone/envsubst/v2 v2.0.0-20210730161058-179042472c46 // indirect
4260
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
4361
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
4462
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
4563
github.com/fsnotify/fsnotify v1.7.0 // indirect
4664
github.com/go-openapi/jsonpointer v0.19.6 // indirect
4765
github.com/go-openapi/jsonreference v0.20.2 // indirect
4866
github.com/go-openapi/swag v0.22.3 // indirect
67+
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
4968
github.com/gobuffalo/flect v1.0.2 // indirect
5069
github.com/gogo/protobuf v1.3.2 // indirect
5170
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
5271
github.com/golang/protobuf v1.5.3 // indirect
5372
github.com/google/cel-go v0.17.7 // indirect
5473
github.com/google/gnostic-models v0.6.8 // indirect
5574
github.com/google/go-cmp v0.6.0 // indirect
75+
github.com/google/go-github/v53 v53.2.0 // indirect
76+
github.com/google/go-querystring v1.1.0 // indirect
5677
github.com/google/gofuzz v1.2.0 // indirect
78+
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect
79+
github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 // indirect
5780
github.com/google/uuid v1.3.1 // indirect
81+
github.com/hashicorp/hcl v1.0.0 // indirect
82+
github.com/huandu/xstrings v1.4.0 // indirect
5883
github.com/imdario/mergo v0.3.13 // indirect
5984
github.com/inconshreveable/mousetrap v1.1.0 // indirect
6085
github.com/josharian/intern v1.0.0 // indirect
6186
github.com/json-iterator/go v1.1.12 // indirect
87+
github.com/magiconair/properties v1.8.7 // indirect
6288
github.com/mailru/easyjson v0.7.7 // indirect
89+
github.com/mattn/go-isatty v0.0.20 // indirect
6390
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
91+
github.com/mitchellh/copystructure v1.2.0 // indirect
92+
github.com/mitchellh/mapstructure v1.5.0 // indirect
93+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
6494
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
6595
github.com/modern-go/reflect2 v1.0.2 // indirect
6696
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
97+
github.com/opencontainers/go-digest v1.0.0 // indirect
98+
github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
99+
github.com/pelletier/go-toml v1.9.5 // indirect
100+
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
67101
github.com/pkg/errors v0.9.1 // indirect
68-
github.com/pmezard/go-difflib v1.0.0 // indirect
102+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
69103
github.com/prometheus/client_golang v1.18.0 // indirect
70104
github.com/prometheus/client_model v0.5.0 // indirect
71105
github.com/prometheus/common v0.45.0 // indirect
72106
github.com/prometheus/procfs v0.12.0 // indirect
107+
github.com/sagikazarmark/locafero v0.3.0 // indirect
108+
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
109+
github.com/shopspring/decimal v1.3.1 // indirect
110+
github.com/sourcegraph/conc v0.3.0 // indirect
111+
github.com/spf13/afero v1.10.0 // indirect
112+
github.com/spf13/cast v1.5.1 // indirect
73113
github.com/spf13/cobra v1.8.0 // indirect
114+
github.com/spf13/viper v1.17.0 // indirect
74115
github.com/stoewer/go-strcase v1.2.0 // indirect
116+
github.com/subosito/gotenv v1.6.0 // indirect
75117
github.com/valyala/fastjson v1.6.4 // indirect
118+
go.uber.org/multierr v1.11.0 // indirect
119+
golang.org/x/crypto v0.17.0 // indirect
76120
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
121+
golang.org/x/mod v0.14.0 // indirect
77122
golang.org/x/net v0.19.0 // indirect
78123
golang.org/x/oauth2 v0.14.0 // indirect
124+
golang.org/x/sync v0.5.0 // indirect
79125
golang.org/x/sys v0.16.0 // indirect
80126
golang.org/x/term v0.15.0 // indirect
81127
golang.org/x/text v0.14.0 // indirect
82128
golang.org/x/time v0.3.0 // indirect
129+
golang.org/x/tools v0.16.1 // indirect
83130
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
84131
google.golang.org/appengine v1.6.7 // indirect
85132
google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb // indirect
86133
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
87134
google.golang.org/protobuf v1.31.0 // indirect
88135
gopkg.in/inf.v0 v0.9.1 // indirect
136+
gopkg.in/ini.v1 v1.67.0 // indirect
89137
gopkg.in/yaml.v2 v2.4.0 // indirect
90138
gopkg.in/yaml.v3 v3.0.1 // indirect
91139
k8s.io/cluster-bootstrap v0.29.1 // indirect
92140
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
93141
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
142+
sigs.k8s.io/kind v0.20.0 // indirect
94143
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
95144
sigs.k8s.io/yaml v1.4.0 // indirect
96145
)

0 commit comments

Comments
 (0)