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:
		
							parent
							
								
									4d465272eb
								
							
						
					
					
						commit
						1325ebfc23
					
				| 
						 | 
				
			
			@ -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{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue