Avoid global gomega Expect() usage

Upcoming testenv creates local instances of Gomega. Update LoadImages()
and ServeHTTP() to not use global Expect().

Signed-off-by: Sunny <darkowlzz@protonmail.com>
This commit is contained in:
Sunny 2022-04-19 12:41:55 +05:30
parent 4d465272eb
commit 1325ebfc23
No known key found for this signature in database
GPG Key ID: 9F3D25DDFF7FA3CF
5 changed files with 58 additions and 30 deletions

View File

@ -62,7 +62,8 @@ var _ = Describe("ImagePolicy controller", func() {
It("fails to reconcile an ImagePolicy with a cross-ns ref", func() {
// a bona fide image repo is needed so that it _would_ succeed if not for the disallowed cross-ns ref.
versions := []string{"1.0.1", "1.0.2", "1.1.0-alpha"}
imgRepo := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -120,7 +121,8 @@ var _ = Describe("ImagePolicy controller", func() {
When("Using SemVerPolicy", func() {
It("calculates an image from a repository's tags", func() {
versions := []string{"0.1.0", "0.1.1", "0.2.0", "1.0.0", "1.0.1", "1.0.2", "1.1.0-alpha"}
imgRepo := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -185,7 +187,8 @@ var _ = Describe("ImagePolicy controller", func() {
When("Using SemVerPolicy with invalid range", func() {
It("fails with invalid policy error", func() {
versions := []string{"0.1.0", "0.1.1", "0.2.0", "1.0.0", "1.0.1", "1.0.2", "1.1.0-alpha"}
imgRepo := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -251,7 +254,8 @@ var _ = Describe("ImagePolicy controller", func() {
When("Usign AlphabeticalPolicy", func() {
It("calculates an image from a repository's tags", func() {
versions := []string{"xenial", "yakkety", "zesty", "artful", "bionic"}
imgRepo := test.LoadImages(registryServer, "test-alphabetical-policy-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "test-alphabetical-policy-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -313,7 +317,8 @@ var _ = Describe("ImagePolicy controller", func() {
When("valid regex supplied", func() {
It("correctly filters the repo tags", func() {
versions := []string{"test-0.1.0", "test-0.1.1", "dev-0.2.0", "1.0.0", "1.0.1", "1.0.2", "1.1.0-alpha"}
imgRepo := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
Interval: metav1.Duration{Duration: reconciliationInterval},
@ -381,7 +386,8 @@ var _ = Describe("ImagePolicy controller", func() {
When("invalid regex supplied", func() {
It("fails to reconcile returning error", func() {
versions := []string{"test-0.1.0", "test-0.1.1", "dev-0.2.0", "1.0.0", "1.0.1", "1.0.2", "1.1.0-alpha"}
imgRepo := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "test-semver-policy-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
Interval: metav1.Duration{Duration: reconciliationInterval},
@ -456,7 +462,8 @@ var _ = Describe("ImagePolicy controller", func() {
It("grants access", func() {
versions := []string{"1.0.0", "1.0.1"}
imageName := "test-acl-" + randStringRunes(5)
imgRepo := test.LoadImages(registryServer, imageName, versions)
imgRepo, err := test.LoadImages(registryServer, imageName, versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -515,7 +522,8 @@ var _ = Describe("ImagePolicy controller", func() {
Expect(pol.Status.LatestImage).To(Equal(imgRepo + ":1.0.1"))
// Updating the image should reconcile the cross-namespace policy
imgRepo = test.LoadImages(registryServer, imageName, []string{"1.0.2"})
imgRepo, err = test.LoadImages(registryServer, imageName, []string{"1.0.2"})
Expect(err).ToNot(HaveOccurred())
Eventually(func() bool {
err := r.Get(ctx, imageObjectName, &repo)
return err == nil && repo.Status.LastScanResult.TagCount == len(versions)+1
@ -543,7 +551,8 @@ var _ = Describe("ImagePolicy controller", func() {
defer k8sClient.Delete(context.Background(), policyNamespace)
versions := []string{"1.0.0", "1.0.1"}
imgRepo := test.LoadImages(registryServer, "acl-image-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "acl-image-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -616,7 +625,8 @@ var _ = Describe("ImagePolicy controller", func() {
defer k8sClient.Delete(context.Background(), policyNamespace)
versions := []string{"1.0.0", "1.0.1"}
imgRepo := test.LoadImages(registryServer, "acl-image-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "acl-image-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -699,7 +709,8 @@ var _ = Describe("ImagePolicy controller", func() {
versions := []string{"1.0.0", "1.0.1"}
imageName := "acl-image-" + randStringRunes(5)
imgRepo := test.LoadImages(registryServer, imageName, versions)
imgRepo, err := test.LoadImages(registryServer, imageName, versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -772,7 +783,8 @@ var _ = Describe("ImagePolicy controller", func() {
Expect(pol.Status.LatestImage).To(Equal(imgRepo + ":1.0.1"))
// Updating the image should reconcile the cross-namespace policy
imgRepo = test.LoadImages(registryServer, imageName, []string{"1.0.2"})
imgRepo, err = test.LoadImages(registryServer, imageName, []string{"1.0.2"})
Expect(err).ToNot(HaveOccurred())
Eventually(func() bool {
err := r.Get(ctx, repoObjectName, &repo)
return err == nil && repo.Status.LastScanResult.TagCount == len(versions)+1
@ -800,7 +812,8 @@ var _ = Describe("ImagePolicy controller", func() {
defer k8sClient.Delete(context.Background(), policyNamespace)
versions := []string{"1.0.0", "1.0.1"}
imgRepo := test.LoadImages(registryServer, "acl-image-"+randStringRunes(5), versions)
imgRepo, err := test.LoadImages(registryServer, "acl-image-"+randStringRunes(5), versions)
Expect(err).ToNot(HaveOccurred())
repo := imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{

View File

@ -35,7 +35,8 @@ var _ = Context("Registry handler", func() {
defer srv.Close()
uploadedTags := []string{"tag1", "tag2"}
repoString := test.LoadImages(srv, "testimage", uploadedTags)
repoString, err := test.LoadImages(srv, "testimage", uploadedTags)
Expect(err).ToNot(HaveOccurred())
repo, _ := name.NewRepository(repoString)
tags, err := remote.List(repo)

View File

@ -88,7 +88,8 @@ var _ = Describe("ImageRepository controller", func() {
It("fetches the tags for an image", func() {
versions := []string{"0.1.0", "0.1.1", "0.2.0", "1.0.0", "1.0.1", "1.0.2", "1.1.0-alpha"}
imgRepo := test.LoadImages(registryServer, "test-fetch", versions)
imgRepo, err := test.LoadImages(registryServer, "test-fetch", versions)
Expect(err).ToNot(HaveOccurred())
repo = imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -158,7 +159,8 @@ var _ = Describe("ImageRepository controller", func() {
Context("when the ImageRepository gets a 'reconcile at' annotation", func() {
It("scans right away", func() {
imgRepo := test.LoadImages(registryServer, "test-fetch", []string{"1.0.0"})
imgRepo, err := test.LoadImages(registryServer, "test-fetch", []string{"1.0.0"})
Expect(err).ToNot(HaveOccurred())
repo = imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -178,7 +180,7 @@ var _ = Describe("ImageRepository controller", func() {
defer cancel()
r := imageRepoReconciler
err := r.Create(ctx, &repo)
err = r.Create(ctx, &repo)
Expect(err).ToNot(HaveOccurred())
// It'll get scanned on creation
@ -243,10 +245,11 @@ var _ = Describe("ImageRepository controller", func() {
It("can scan the registry", func() {
versions := []string{"0.1.0", "0.1.1", "0.2.0", "1.0.0", "1.0.1", "1.0.2", "1.1.0-alpha"}
// this, as a side-effect, verifies that the username and password work with the registry
imgRepo := test.LoadImages(registryServer, "test-auth", versions, remote.WithAuth(&authn.Basic{
imgRepo, err := test.LoadImages(registryServer, "test-auth", versions, remote.WithAuth(&authn.Basic{
Username: username,
Password: password,
}))
Expect(err).ToNot(HaveOccurred())
repo = imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -282,7 +285,9 @@ var _ = Describe("ImageRepository controller", func() {
Context("ImageRepository image attribute is invalid", func() {
It("fails with an error when prefixed with a scheme", func() {
imgRepo := "https://" + test.LoadImages(registryServer, "test-fetch", []string{"1.0.0"})
imgRepo, err := test.LoadImages(registryServer, "test-fetch", []string{"1.0.0"})
Expect(err).ToNot(HaveOccurred())
imgRepo = "https://" + imgRepo
repo = imagev1.ImageRepository{
Spec: imagev1.ImageRepositorySpec{
@ -302,7 +307,7 @@ var _ = Describe("ImageRepository controller", func() {
defer cancel()
r := imageRepoReconciler
err := r.Create(ctx, &repo)
err = r.Create(ctx, &repo)
Expect(err).ToNot(HaveOccurred())
var ready *metav1.Condition
@ -314,7 +319,8 @@ var _ = Describe("ImageRepository controller", func() {
Expect(ready.Message).To(ContainSubstring("should not start with URL scheme"))
})
It("does not fail if using a hostname with a port number", func() {
imgRepo := test.LoadImages(registryServer, "test-fetch", []string{"1.0.0"})
imgRepo, err := test.LoadImages(registryServer, "test-fetch", []string{"1.0.0"})
Expect(err).ToNot(HaveOccurred())
imgRepo = strings.ReplaceAll(imgRepo, "127.0.0.1", "localhost")
repo = imagev1.ImageRepository{

View File

@ -162,7 +162,8 @@ var _ = Context("using TLS certificates", func() {
pool.AddCert(srv.Certificate())
transport.TLSClientConfig.RootCAs = pool
transport.TLSClientConfig.Certificates = []tls.Certificate{clientTLSCert}
imgRepo := test.LoadImages(srv, "image", []string{"1.0.0"}, remote.WithTransport(transport))
imgRepo, err := test.LoadImages(srv, "image", []string{"1.0.0"}, remote.WithTransport(transport))
Expect(err).ToNot(HaveOccurred())
secretName := "tls-secret"
tlsSecret := corev1.Secret{

View File

@ -11,7 +11,6 @@ import (
"github.com/google/go-containerregistry/pkg/registry"
"github.com/google/go-containerregistry/pkg/v1/random"
"github.com/google/go-containerregistry/pkg/v1/remote"
. "github.com/onsi/gomega"
)
// pre-populated db of tags, so it's not necessary to upload images to
@ -55,20 +54,26 @@ func RegistryName(srv *httptest.Server) string {
return strings.TrimPrefix(srv.URL, "http://")
}
// loadImages uploads images to the local registry, and returns the
// LoadImages uploads images to the local registry, and returns the
// image repo
// name. https://github.com/google/go-containerregistry/blob/v0.1.1/pkg/registry/compatibility_test.go
// has an example of loading a test registry with a random image.
func LoadImages(srv *httptest.Server, imageName string, versions []string, options ...remote.Option) string {
func LoadImages(srv *httptest.Server, imageName string, versions []string, options ...remote.Option) (string, error) {
imgRepo := RegistryName(srv) + "/" + imageName
for _, tag := range versions {
imgRef, err := name.NewTag(imgRepo + ":" + tag)
Expect(err).ToNot(HaveOccurred())
if err != nil {
return imgRepo, err
}
img, err := random.Image(512, 1)
Expect(err).ToNot(HaveOccurred())
Expect(remote.Write(imgRef, img, options...)).To(Succeed())
if err != nil {
return imgRepo, err
}
if err := remote.Write(imgRef, img, options...); err != nil {
return imgRepo, err
}
}
return imgRepo
return imgRepo, nil
}
// the go-containerregistry test registry implementation does not
@ -98,7 +103,9 @@ func (h *TagListHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
Name: repo,
Tags: tags,
}
Expect(json.NewEncoder(w).Encode(result)).To(Succeed())
if err := json.NewEncoder(w).Encode(result); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
println("Requested tags", repo, strings.Join(tags, ", "))
return
}