From 4c45943370a050247a658969faebc9ba75e7bd59 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 11:46:12 -0400 Subject: [PATCH 1/8] add e2e happy path tests Signed-off-by: Bryce Palmer --- .bingo/Variables.mk | 6 ++++++ .bingo/variables.env | 2 ++ Makefile | 17 ++++++++++++++++- go.mod | 19 +++++++++++-------- go.sum | 39 ++++++++++++++++++++++++--------------- 5 files changed, 59 insertions(+), 24 deletions(-) diff --git a/.bingo/Variables.mk b/.bingo/Variables.mk index 1a0fdd82..fdc3e73e 100644 --- a/.bingo/Variables.mk +++ b/.bingo/Variables.mk @@ -29,6 +29,12 @@ $(CONTROLLER_GEN): $(BINGO_DIR)/controller-gen.mod @echo "(re)installing $(GOBIN)/controller-gen-v0.11.4" @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=controller-gen.mod -o=$(GOBIN)/controller-gen-v0.11.4 "sigs.k8s.io/controller-tools/cmd/controller-gen" +GINKGO := $(GOBIN)/ginkgo-v2.9.7 +$(GINKGO): $(BINGO_DIR)/ginkgo.mod + @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. + @echo "(re)installing $(GOBIN)/ginkgo-v2.9.7" + @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=ginkgo.mod -o=$(GOBIN)/ginkgo-v2.9.7 "github.com/onsi/ginkgo/v2/ginkgo" + GORELEASER := $(GOBIN)/goreleaser-v1.16.2 $(GORELEASER): $(BINGO_DIR)/goreleaser.mod @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. diff --git a/.bingo/variables.env b/.bingo/variables.env index c09cd4d6..8cba60ed 100644 --- a/.bingo/variables.env +++ b/.bingo/variables.env @@ -12,6 +12,8 @@ BINGO="${GOBIN}/bingo-v0.8.0" CONTROLLER_GEN="${GOBIN}/controller-gen-v0.11.4" +GINKGO="${GOBIN}/ginkgo-v2.9.7" + GORELEASER="${GOBIN}/goreleaser-v1.16.2" KIND="${GOBIN}/kind-v0.15.0" diff --git a/Makefile b/Makefile index 5a0d6a58..3e96a1e6 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,10 @@ ENVTEST_SERVER_VERSION = $(shell go list -m k8s.io/client-go | cut -d" " -f2 | s KIND_CLUSTER_NAME ?= catalogd CATALOGD_NAMESPACE ?= catalogd-system +# E2E configuration +TESTDATA_DIR ?= testdata +CONTAINER_RUNTIME ?= docker + ##@ General # The help target prints out all targets with their descriptions organized @@ -55,7 +59,15 @@ vet: ## Run go vet against code. .PHONY: test test-unit: generate fmt vet $(SETUP_ENVTEST) ## Run tests. - eval $$($(SETUP_ENVTEST) use -p env $(ENVTEST_SERVER_VERSION)) && go test ./... -coverprofile cover.out + eval $$($(SETUP_ENVTEST) use -p env $(ENVTEST_SERVER_VERSION)) && go test $(shell go list ./... | grep -v /test/e2e) -coverprofile cover.out + +FOCUS := $(if $(TEST),-v -focus "$(TEST)") +E2E_FLAGS ?= "" +test-e2e: $(GINKGO) ## Run the e2e tests + $(GINKGO) --tags $(GO_BUILD_TAGS) $(E2E_FLAGS) -trace -progress $(FOCUS) test/e2e + +e2e: KIND_CLUSTER_NAME=catalogd-e2e +e2e: run kind-load-test-artifacts test-e2e kind-cluster-cleanup ## Run e2e test suite on local kind cluster .PHONY: tidy tidy: ## Update dependencies @@ -131,6 +143,9 @@ kind-load: $(KIND) ## Load the built images onto the local cluster $(KIND) export kubeconfig --name $(KIND_CLUSTER_NAME) $(KIND) load docker-image $(IMAGE) --name $(KIND_CLUSTER_NAME) +kind-load-test-artifacts: $(KIND) ## Load the e2e testdata container images into a kind cluster + $(CONTAINER_RUNTIME) build $(TESTDATA_DIR)/catalogs -f $(TESTDATA_DIR)/catalogs/test-catalog.Dockerfile -t localhost/testdata/catalogs/test-catalog:e2e + $(KIND) load docker-image localhost/testdata/catalogs/test-catalog:e2e --name $(KIND_CLUSTER_NAME) .PHONY: install install: build-container kind-load deploy wait ## Install local catalogd diff --git a/go.mod b/go.mod index 1ddfb2e2..0c840df3 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.19 require ( github.com/blang/semver/v4 v4.0.0 github.com/nlepage/go-tarfs v1.1.0 - github.com/onsi/ginkgo/v2 v2.6.0 - github.com/onsi/gomega v1.24.1 + github.com/onsi/ginkgo/v2 v2.9.7 + github.com/onsi/gomega v1.27.7 github.com/operator-framework/operator-registry v1.26.3 k8s.io/api v0.26.0 k8s.io/apimachinery v0.26.0 @@ -25,17 +25,19 @@ require ( github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.1.0 // indirect github.com/go-git/go-git/v5 v5.3.0 // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/zapr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gofuzz v1.1.0 // indirect + github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/google/uuid v1.3.0 // indirect github.com/h2non/filetype v1.1.1 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect @@ -59,12 +61,13 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/net v0.4.0 // indirect + golang.org/x/net v0.10.0 // indirect golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect - golang.org/x/sys v0.3.0 // indirect - golang.org/x/term v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index d5188f80..165c4296 100644 --- a/go.sum +++ b/go.sum @@ -101,8 +101,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -114,6 +114,8 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -145,8 +147,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= @@ -174,6 +177,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -186,6 +191,7 @@ github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -242,10 +248,10 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nlepage/go-tarfs v1.1.0 h1:bsACOiZMB/zFjYG/sE01070i9Fl26MnRpw0L6WuyfVs= github.com/nlepage/go-tarfs v1.1.0/go.mod h1:IhxRcLhLkawBetnwu/JNuoPkq/6cclAllhgEa6SmzS8= -github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= -github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= -github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= +github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= +github.com/onsi/ginkgo/v2 v2.9.7/go.mod h1:cxrmXWykAwTwhQsJOPfdIDiJ+l2RYq7U8hFU+M/1uw0= +github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= +github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= github.com/operator-framework/api v0.17.2-0.20220915200120-ff2dbc53d381 h1:/XHgTzfI0O/RP3I6WF0BiPLVuVkfgVyiw04b0MyCJ2M= github.com/operator-framework/api v0.17.2-0.20220915200120-ff2dbc53d381/go.mod h1:wof6IrBhVAufc+ZiQo/BB68fKctXiuSEAMbOO29kZdI= github.com/operator-framework/operator-registry v1.26.3 h1:U+HTGgjAT5RCXU2WkDwa525wcqdo97BsO7WfMhwL5MA= @@ -358,6 +364,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -392,8 +399,8 @@ golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5o golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -456,12 +463,12 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -469,8 +476,8 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -519,6 +526,8 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 8ca191179e2d6230631f5f709d573eeea6f416bb Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 11:46:39 -0400 Subject: [PATCH 2/8] missed some files... Signed-off-by: Bryce Palmer --- .bingo/ginkgo.mod | 5 + .bingo/ginkgo.sum | 20 +++ test/e2e/e2e_suite_test.go | 36 ++++++ test/e2e/unpack_test.go | 133 ++++++++++++++++++++ testdata/catalogs/test-catalog.Dockerfile | 2 + testdata/catalogs/test-catalog/catalog.yaml | 23 ++++ 6 files changed, 219 insertions(+) create mode 100644 .bingo/ginkgo.mod create mode 100644 .bingo/ginkgo.sum create mode 100644 test/e2e/e2e_suite_test.go create mode 100644 test/e2e/unpack_test.go create mode 100644 testdata/catalogs/test-catalog.Dockerfile create mode 100644 testdata/catalogs/test-catalog/catalog.yaml diff --git a/.bingo/ginkgo.mod b/.bingo/ginkgo.mod new file mode 100644 index 00000000..185fd3b3 --- /dev/null +++ b/.bingo/ginkgo.mod @@ -0,0 +1,5 @@ +module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT + +go 1.20 + +require github.com/onsi/ginkgo/v2 v2.9.7 // ginkgo diff --git a/.bingo/ginkgo.sum b/.bingo/ginkgo.sum new file mode 100644 index 00000000..97b5eb8b --- /dev/null +++ b/.bingo/ginkgo.sum @@ -0,0 +1,20 @@ +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= +github.com/onsi/ginkgo/v2 v2.9.7/go.mod h1:cxrmXWykAwTwhQsJOPfdIDiJ+l2RYq7U8hFU+M/1uw0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go new file mode 100644 index 00000000..4cfd4033 --- /dev/null +++ b/test/e2e/e2e_suite_test.go @@ -0,0 +1,36 @@ +package e2e + +import ( + "testing" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + catalogd "github.com/operator-framework/catalogd/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/rest" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +var ( + cfg *rest.Config + c client.Client +) + +func TestE2E(t *testing.T) { + RegisterFailHandler(Fail) + SetDefaultEventuallyTimeout(1 * time.Minute) + SetDefaultEventuallyPollingInterval(1 * time.Second) + RunSpecs(t, "E2E Suite") +} + +var _ = BeforeSuite(func() { + cfg = ctrl.GetConfigOrDie() + + scheme := runtime.NewScheme() + err := catalogd.AddToScheme(scheme) + Expect(err).ToNot(HaveOccurred()) + c, err = client.New(cfg, client.Options{Scheme: scheme}) + Expect(err).To(Not(HaveOccurred())) +}) diff --git a/test/e2e/unpack_test.go b/test/e2e/unpack_test.go new file mode 100644 index 00000000..8a1b38f3 --- /dev/null +++ b/test/e2e/unpack_test.go @@ -0,0 +1,133 @@ +package e2e + +import ( + "context" + "encoding/json" + "fmt" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + catalogd "github.com/operator-framework/catalogd/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" +) + +const ( + testCatalogRef = "localhost/testdata/catalogs/test-catalog:e2e" + testCatalogName = "test-catalog" + pkg = "prometheus" + version = "0.47.0" + channel = "beta" + bundle = "prometheus-operator.0.47.0" + bundleImage = "localhost/testdata/bundles/registry-v1/prometheus-operator:v0.47.0" +) + +var _ = Describe("Catalog Unpacking", func() { + var ( + ctx context.Context + catalog *catalogd.Catalog + ) + When("A Catalog is created", func() { + BeforeEach(func() { + ctx = context.Background() + var err error + catalog, err = createTestCatalog(ctx, testCatalogName, testCatalogRef) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Successfully unpacks catalog contents", func() { + By("Ensuring Catalog has Status.Condition of Unpacked with a status == True") + Eventually(func(g Gomega) { + err := c.Get(ctx, types.NamespacedName{Name: catalog.Name}, catalog) + g.Expect(err).ToNot(HaveOccurred()) + cond := meta.FindStatusCondition(catalog.Status.Conditions, catalogd.TypeUnpacked) + g.Expect(cond).ToNot(BeNil()) + g.Expect(cond.Status).To(Equal(metav1.ConditionTrue)) + g.Expect(cond.Reason).To(Equal(catalogd.ReasonUnpackSuccessful)) + g.Expect(cond.Message).To(ContainSubstring("successfully unpacked the catalog image")) + }).Should(Succeed()) + + // TODO: Remove these eventually blocks + By("Ensuring the expected Package resource is created") + // Eventually(func(g Gomega) { + // pack := &catalogd.Package{} + // err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, pkg)}, pack) + // g.Expect(err).ToNot(HaveOccurred()) + // g.Expect(pack.Spec.Catalog.Name).To(Equal(catalog.Name)) + // g.Expect(pack.Spec.Channels).To(HaveLen(1)) + // g.Expect(pack.Spec.Channels[0].Name).To(Equal(channel)) + // g.Expect(pack.Spec.Channels[0].Entries).To(HaveLen(1)) + // g.Expect(pack.Spec.Channels[0].Entries[0].Name).To(Equal(bundle)) + // g.Expect(pack.Spec.DefaultChannel).To(Equal(channel)) + // g.Expect(pack.Spec.Name).To(Equal(pkg)) + // }).Should(Succeed()) + + pack := &catalogd.Package{} + err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, pkg)}, pack) + Expect(err).ToNot(HaveOccurred()) + Expect(pack.Spec.Catalog.Name).To(Equal(catalog.Name)) + Expect(pack.Spec.Channels).To(HaveLen(1)) + Expect(pack.Spec.Channels[0].Name).To(Equal(channel)) + Expect(pack.Spec.Channels[0].Entries).To(HaveLen(1)) + Expect(pack.Spec.Channels[0].Entries[0].Name).To(Equal(bundle)) + Expect(pack.Spec.DefaultChannel).To(Equal(channel)) + Expect(pack.Spec.Name).To(Equal(pkg)) + + By("Ensuring the expected BundleMetadata resource is created") + // Eventually(func(g Gomega) { + // bm := &catalogd.BundleMetadata{} + // err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, bundle)}, bm) + // g.Expect(err).ToNot(HaveOccurred()) + // g.Expect(bm.Spec.Catalog.Name).To(Equal(catalog.Name)) + // g.Expect(bm.Spec.Package).To(Equal(pkg)) + // g.Expect(bm.Spec.Image).To(Equal(bundleImage)) + // g.Expect(bm.Spec.Properties).To(HaveLen(1)) + // g.Expect(bm.Spec.Properties[0].Type).To(Equal("olm.package")) + // g.Expect(bm.Spec.Properties[0].Value).To(Equal(`{"packageName":"prometheus","version":"0.47.0"}`)) + // }).Should(Succeed()) + + bm := &catalogd.BundleMetadata{} + err = c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, bundle)}, bm) + Expect(err).ToNot(HaveOccurred()) + Expect(bm.Spec.Catalog.Name).To(Equal(catalog.Name)) + Expect(bm.Spec.Package).To(Equal(pkg)) + Expect(bm.Spec.Image).To(Equal(bundleImage)) + Expect(bm.Spec.Properties).To(HaveLen(1)) + Expect(bm.Spec.Properties[0].Type).To(Equal("olm.package")) + Expect(bm.Spec.Properties[0].Value).To(Equal(json.RawMessage(`{"packageName":"prometheus","version":"0.47.0"}`))) + }) + + AfterEach(func() { + err := c.Delete(ctx, catalog) + Expect(err).ToNot(HaveOccurred()) + Eventually(func(g Gomega) { + err = c.Get(ctx, types.NamespacedName{Name: catalog.Name}, &catalogd.Catalog{}) + g.Expect(errors.IsNotFound(err)).To(BeTrue()) + }).Should(Succeed()) + }) + }) +}) + +// createTestCatalog will create a new catalog on the test cluster, provided +// the context, catalog name, and the image reference. It returns the created catalog +// or an error if any errors occurred while creating the catalog. +func createTestCatalog(ctx context.Context, name string, imageRef string) (*catalogd.Catalog, error) { + catalog := &catalogd.Catalog{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + }, + Spec: catalogd.CatalogSpec{ + Source: catalogd.CatalogSource{ + Type: catalogd.SourceTypeImage, + Image: &catalogd.ImageSource{ + Ref: imageRef, + }, + }, + }, + } + + err := c.Create(ctx, catalog) + return catalog, err +} diff --git a/testdata/catalogs/test-catalog.Dockerfile b/testdata/catalogs/test-catalog.Dockerfile new file mode 100644 index 00000000..ea103096 --- /dev/null +++ b/testdata/catalogs/test-catalog.Dockerfile @@ -0,0 +1,2 @@ +FROM scratch +ADD test-catalog /configs diff --git a/testdata/catalogs/test-catalog/catalog.yaml b/testdata/catalogs/test-catalog/catalog.yaml new file mode 100644 index 00000000..8c605087 --- /dev/null +++ b/testdata/catalogs/test-catalog/catalog.yaml @@ -0,0 +1,23 @@ +--- +schema: olm.package +name: prometheus +defaultChannel: beta +--- +schema: olm.channel +name: beta +package: prometheus +entries: + - name: prometheus-operator.0.47.0 +--- +schema: olm.bundle +name: prometheus-operator.0.47.0 +package: prometheus +image: localhost/testdata/bundles/registry-v1/prometheus-operator:v0.47.0 +relatedImages: + - name: "" + image: "" +properties: + - type: olm.package + value: + packageName: prometheus + version: 0.47.0 From b66643f21fa240ca66832c44c66f3f829747ac0d Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 11:48:50 -0400 Subject: [PATCH 3/8] remove commented code Signed-off-by: Bryce Palmer --- test/e2e/unpack_test.go | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/test/e2e/unpack_test.go b/test/e2e/unpack_test.go index 8a1b38f3..15b3ab1a 100644 --- a/test/e2e/unpack_test.go +++ b/test/e2e/unpack_test.go @@ -49,21 +49,7 @@ var _ = Describe("Catalog Unpacking", func() { g.Expect(cond.Message).To(ContainSubstring("successfully unpacked the catalog image")) }).Should(Succeed()) - // TODO: Remove these eventually blocks By("Ensuring the expected Package resource is created") - // Eventually(func(g Gomega) { - // pack := &catalogd.Package{} - // err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, pkg)}, pack) - // g.Expect(err).ToNot(HaveOccurred()) - // g.Expect(pack.Spec.Catalog.Name).To(Equal(catalog.Name)) - // g.Expect(pack.Spec.Channels).To(HaveLen(1)) - // g.Expect(pack.Spec.Channels[0].Name).To(Equal(channel)) - // g.Expect(pack.Spec.Channels[0].Entries).To(HaveLen(1)) - // g.Expect(pack.Spec.Channels[0].Entries[0].Name).To(Equal(bundle)) - // g.Expect(pack.Spec.DefaultChannel).To(Equal(channel)) - // g.Expect(pack.Spec.Name).To(Equal(pkg)) - // }).Should(Succeed()) - pack := &catalogd.Package{} err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, pkg)}, pack) Expect(err).ToNot(HaveOccurred()) @@ -76,18 +62,6 @@ var _ = Describe("Catalog Unpacking", func() { Expect(pack.Spec.Name).To(Equal(pkg)) By("Ensuring the expected BundleMetadata resource is created") - // Eventually(func(g Gomega) { - // bm := &catalogd.BundleMetadata{} - // err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, bundle)}, bm) - // g.Expect(err).ToNot(HaveOccurred()) - // g.Expect(bm.Spec.Catalog.Name).To(Equal(catalog.Name)) - // g.Expect(bm.Spec.Package).To(Equal(pkg)) - // g.Expect(bm.Spec.Image).To(Equal(bundleImage)) - // g.Expect(bm.Spec.Properties).To(HaveLen(1)) - // g.Expect(bm.Spec.Properties[0].Type).To(Equal("olm.package")) - // g.Expect(bm.Spec.Properties[0].Value).To(Equal(`{"packageName":"prometheus","version":"0.47.0"}`)) - // }).Should(Succeed()) - bm := &catalogd.BundleMetadata{} err = c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, bundle)}, bm) Expect(err).ToNot(HaveOccurred()) From 0e274a21427901d571d4b9e10c87d393e3f7d3ac Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 11:52:56 -0400 Subject: [PATCH 4/8] add gh actions e2e workflow Signed-off-by: Bryce Palmer --- .github/workflows/e2e.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/e2e.yaml diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml new file mode 100644 index 00000000..1cfe915d --- /dev/null +++ b/.github/workflows/e2e.yaml @@ -0,0 +1,18 @@ +name: e2e + +on: + workflow_dispatch: + pull_request: + push: + branches: + - main + +jobs: + unit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-go@v4 + with: + go-version-file: "go.mod" + - run: make test-e2e \ No newline at end of file From f20bd3c63b2e3ff05045181af590411b1f686704 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 11:53:41 -0400 Subject: [PATCH 5/8] fix e2e job name Signed-off-by: Bryce Palmer --- .github/workflows/e2e.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 1cfe915d..0681735e 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -8,7 +8,7 @@ on: - main jobs: - unit: + e2e: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From 5a26cc578eb3db9c8d0e495e86f8d26acc3ea8e6 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 12:17:09 -0400 Subject: [PATCH 6/8] rebase Signed-off-by: Bryce Palmer --- test/e2e/e2e_suite_test.go | 2 +- test/e2e/unpack_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index 4cfd4033..6df0e86a 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -6,7 +6,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - catalogd "github.com/operator-framework/catalogd/pkg/apis/core/v1beta1" + catalogd "github.com/operator-framework/catalogd/api/core/v1alpha1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest" ctrl "sigs.k8s.io/controller-runtime" diff --git a/test/e2e/unpack_test.go b/test/e2e/unpack_test.go index 15b3ab1a..cea6a86a 100644 --- a/test/e2e/unpack_test.go +++ b/test/e2e/unpack_test.go @@ -7,7 +7,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - catalogd "github.com/operator-framework/catalogd/pkg/apis/core/v1beta1" + catalogd "github.com/operator-framework/catalogd/api/core/v1alpha1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" From 03e3ace3ecf16cb49956bc199eb8c8578a745338 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 12:32:17 -0400 Subject: [PATCH 7/8] fix the make command being run for e2e Signed-off-by: Bryce Palmer --- .github/workflows/e2e.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 0681735e..4ae07f8d 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -15,4 +15,4 @@ jobs: - uses: actions/setup-go@v4 with: go-version-file: "go.mod" - - run: make test-e2e \ No newline at end of file + - run: make e2e \ No newline at end of file From c9a5b9d7a6968071d83eff281388a8a94d6c91c7 Mon Sep 17 00:00:00 2001 From: Bryce Palmer Date: Wed, 7 Jun 2023 16:25:56 -0400 Subject: [PATCH 8/8] address review comments Signed-off-by: Bryce Palmer --- test/e2e/unpack_test.go | 105 +++++++++++++++++++++++----------------- 1 file changed, 61 insertions(+), 44 deletions(-) diff --git a/test/e2e/unpack_test.go b/test/e2e/unpack_test.go index cea6a86a..7e108fa5 100644 --- a/test/e2e/unpack_test.go +++ b/test/e2e/unpack_test.go @@ -8,6 +8,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" catalogd "github.com/operator-framework/catalogd/api/core/v1alpha1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -15,13 +16,13 @@ import ( ) const ( - testCatalogRef = "localhost/testdata/catalogs/test-catalog:e2e" - testCatalogName = "test-catalog" - pkg = "prometheus" - version = "0.47.0" - channel = "beta" - bundle = "prometheus-operator.0.47.0" - bundleImage = "localhost/testdata/bundles/registry-v1/prometheus-operator:v0.47.0" + catalogRef = "localhost/testdata/catalogs/test-catalog:e2e" + catalogName = "test-catalog" + pkg = "prometheus" + version = "0.47.0" + channel = "beta" + bundle = "prometheus-operator.0.47.0" + bundleImage = "localhost/testdata/bundles/registry-v1/prometheus-operator:v0.47.0" ) var _ = Describe("Catalog Unpacking", func() { @@ -33,7 +34,21 @@ var _ = Describe("Catalog Unpacking", func() { BeforeEach(func() { ctx = context.Background() var err error - catalog, err = createTestCatalog(ctx, testCatalogName, testCatalogRef) + catalog = &catalogd.Catalog{ + ObjectMeta: metav1.ObjectMeta{ + Name: catalogName, + }, + Spec: catalogd.CatalogSpec{ + Source: catalogd.CatalogSource{ + Type: catalogd.SourceTypeImage, + Image: &catalogd.ImageSource{ + Ref: catalogRef, + }, + }, + }, + } + + err = c.Create(ctx, catalog) Expect(err).ToNot(HaveOccurred()) }) @@ -46,31 +61,55 @@ var _ = Describe("Catalog Unpacking", func() { g.Expect(cond).ToNot(BeNil()) g.Expect(cond.Status).To(Equal(metav1.ConditionTrue)) g.Expect(cond.Reason).To(Equal(catalogd.ReasonUnpackSuccessful)) - g.Expect(cond.Message).To(ContainSubstring("successfully unpacked the catalog image")) }).Should(Succeed()) By("Ensuring the expected Package resource is created") pack := &catalogd.Package{} + expectedPackSpec := catalogd.PackageSpec{ + Catalog: v1.LocalObjectReference{ + Name: catalogName, + }, + Channels: []catalogd.PackageChannel{ + { + Name: channel, + Entries: []catalogd.ChannelEntry{ + { + Name: bundle, + }, + }, + }, + }, + DefaultChannel: channel, + Name: pkg, + } err := c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, pkg)}, pack) Expect(err).ToNot(HaveOccurred()) - Expect(pack.Spec.Catalog.Name).To(Equal(catalog.Name)) - Expect(pack.Spec.Channels).To(HaveLen(1)) - Expect(pack.Spec.Channels[0].Name).To(Equal(channel)) - Expect(pack.Spec.Channels[0].Entries).To(HaveLen(1)) - Expect(pack.Spec.Channels[0].Entries[0].Name).To(Equal(bundle)) - Expect(pack.Spec.DefaultChannel).To(Equal(channel)) - Expect(pack.Spec.Name).To(Equal(pkg)) + Expect(pack.Spec).To(Equal(expectedPackSpec)) By("Ensuring the expected BundleMetadata resource is created") bm := &catalogd.BundleMetadata{} + expectedBMSpec := catalogd.BundleMetadataSpec{ + Catalog: v1.LocalObjectReference{ + Name: catalogName, + }, + Package: pkg, + Image: bundleImage, + Properties: []catalogd.Property{ + { + Type: "olm.package", + Value: json.RawMessage(`{"packageName":"prometheus","version":"0.47.0"}`), + }, + }, + RelatedImages: []catalogd.RelatedImage{ + { + Name: "", + Image: "", + }, + }, + } err = c.Get(ctx, types.NamespacedName{Name: fmt.Sprintf("%s-%s", catalog.Name, bundle)}, bm) Expect(err).ToNot(HaveOccurred()) - Expect(bm.Spec.Catalog.Name).To(Equal(catalog.Name)) - Expect(bm.Spec.Package).To(Equal(pkg)) - Expect(bm.Spec.Image).To(Equal(bundleImage)) - Expect(bm.Spec.Properties).To(HaveLen(1)) - Expect(bm.Spec.Properties[0].Type).To(Equal("olm.package")) - Expect(bm.Spec.Properties[0].Value).To(Equal(json.RawMessage(`{"packageName":"prometheus","version":"0.47.0"}`))) + Expect(bm.Spec).To(Equal(expectedBMSpec)) }) AfterEach(func() { @@ -83,25 +122,3 @@ var _ = Describe("Catalog Unpacking", func() { }) }) }) - -// createTestCatalog will create a new catalog on the test cluster, provided -// the context, catalog name, and the image reference. It returns the created catalog -// or an error if any errors occurred while creating the catalog. -func createTestCatalog(ctx context.Context, name string, imageRef string) (*catalogd.Catalog, error) { - catalog := &catalogd.Catalog{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: catalogd.CatalogSpec{ - Source: catalogd.CatalogSource{ - Type: catalogd.SourceTypeImage, - Image: &catalogd.ImageSource{ - Ref: imageRef, - }, - }, - }, - } - - err := c.Create(ctx, catalog) - return catalog, err -}