github.com/alex123012/deckhouse-controller-tools@v0.0.0-20230510090815-d594daf1af8c/pkg/loader/loader_test.go (about)

     1  /*
     2  Copyright 2022 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package loader_test
    18  
    19  import (
    20  	"os"
    21  
    22  	. "github.com/onsi/ginkgo"
    23  	. "github.com/onsi/gomega"
    24  
    25  	"sigs.k8s.io/controller-tools/pkg/loader"
    26  )
    27  
    28  var _ = Describe("Loader parsing root module", func() {
    29  	const (
    30  		rootPkg    = "sigs.k8s.io/controller-tools"
    31  		pkgPkg     = rootPkg + "/pkg"
    32  		loaderPkg  = pkgPkg + "/loader"
    33  		testmodPkg = loaderPkg + "/testmod"
    34  	)
    35  
    36  	var indexOfPackage = func(pkgID string, pkgs []*loader.Package) int {
    37  		for i := range pkgs {
    38  			if pkgs[i].ID == pkgID {
    39  				return i
    40  			}
    41  		}
    42  		return -1
    43  	}
    44  
    45  	var assertPkgExists = func(pkgID string, pkgs []*loader.Package) {
    46  		ExpectWithOffset(1, indexOfPackage(pkgID, pkgs)).Should(BeNumerically(">", -1))
    47  	}
    48  
    49  	Context("with named packages/modules", func() {
    50  
    51  		// we need to change into the directory of ./testmod in order to execute
    52  		// tests due to the inability to place the replace statement in the
    53  		// project's root go.mod file (this breaks "go install")
    54  		var previousWorkingDir string
    55  		BeforeEach(func() {
    56  			cwd, err := os.Getwd()
    57  			Expect(err).ToNot(HaveOccurred())
    58  			Expect(cwd).ToNot(BeEmpty())
    59  			previousWorkingDir = cwd
    60  			Expect(os.Chdir("./testmod")).To(Succeed())
    61  		})
    62  		AfterEach(func() {
    63  			Expect(os.Chdir(previousWorkingDir)).To(Succeed())
    64  		})
    65  
    66  		Context("with roots=[sigs.k8s.io/controller-tools/pkg/loader/testmod/submod1]", func() {
    67  			It("should load one package", func() {
    68  				pkgs, err := loader.LoadRoots("sigs.k8s.io/controller-tools/pkg/loader/testmod/submod1")
    69  				Expect(err).ToNot(HaveOccurred())
    70  				Expect(pkgs).To(HaveLen(1))
    71  				assertPkgExists(testmodPkg+"/submod1", pkgs)
    72  			})
    73  		})
    74  
    75  		Context("with roots=[sigs.k8s.io/controller-tools/pkg/loader/testmod/...]", func() {
    76  			It("should load six packages", func() {
    77  				pkgs, err := loader.LoadRoots("sigs.k8s.io/controller-tools/pkg/loader/testmod/...")
    78  				Expect(err).ToNot(HaveOccurred())
    79  				Expect(pkgs).To(HaveLen(6))
    80  				assertPkgExists(testmodPkg, pkgs)
    81  				assertPkgExists(testmodPkg+"/subdir1", pkgs)
    82  				assertPkgExists(testmodPkg+"/subdir1/subdir1", pkgs)
    83  				assertPkgExists(testmodPkg+"/subdir1/subdir2", pkgs)
    84  				assertPkgExists(testmodPkg+"/submod1", pkgs)
    85  				assertPkgExists(testmodPkg+"/submod1/subdir1", pkgs)
    86  			})
    87  		})
    88  
    89  		Context("with roots=[sigs.k8s.io/controller-tools/pkg/loader/testmod/..., ./...]", func() {
    90  			It("should load seven packages", func() {
    91  				pkgs, err := loader.LoadRoots("sigs.k8s.io/controller-tools/pkg/loader/testmod/...", "./...")
    92  				Expect(err).ToNot(HaveOccurred())
    93  				Expect(pkgs).To(HaveLen(7))
    94  				assertPkgExists(testmodPkg, pkgs)
    95  				assertPkgExists(testmodPkg+"/subdir1", pkgs)
    96  				assertPkgExists(testmodPkg+"/subdir1/subdir1", pkgs)
    97  				assertPkgExists(testmodPkg+"/subdir1/subdir2", pkgs)
    98  				assertPkgExists(testmodPkg+"/subdir1/submod1", pkgs)
    99  				assertPkgExists(testmodPkg+"/submod1", pkgs)
   100  				assertPkgExists(testmodPkg+"/submod1/subdir1", pkgs)
   101  			})
   102  		})
   103  	})
   104  
   105  	Context("with roots=[../crd/.]", func() {
   106  		It("should load one package", func() {
   107  			pkgs, err := loader.LoadRoots("../crd/.")
   108  			Expect(err).ToNot(HaveOccurred())
   109  			Expect(pkgs).To(HaveLen(1))
   110  			assertPkgExists(pkgPkg+"/crd", pkgs)
   111  		})
   112  	})
   113  
   114  	Context("with roots=[./]", func() {
   115  		It("should load one package", func() {
   116  			pkgs, err := loader.LoadRoots("./")
   117  			Expect(err).ToNot(HaveOccurred())
   118  			Expect(pkgs).To(HaveLen(1))
   119  			assertPkgExists(loaderPkg, pkgs)
   120  		})
   121  	})
   122  
   123  	Context("with roots=[../../pkg/loader]", func() {
   124  		It("should load one package", func() {
   125  			pkgs, err := loader.LoadRoots("../../pkg/loader")
   126  			Expect(err).ToNot(HaveOccurred())
   127  			Expect(pkgs).To(HaveLen(1))
   128  			assertPkgExists(loaderPkg, pkgs)
   129  		})
   130  	})
   131  
   132  	Context("with roots=[../../pkg/loader/../loader/testmod/..., ./testmod/./../testmod//.]", func() {
   133  		It("should load seven packages", func() {
   134  			pkgs, err := loader.LoadRoots(
   135  				"../../pkg/loader/../loader/testmod/...",
   136  				"./testmod/./../testmod//.")
   137  			Expect(err).ToNot(HaveOccurred())
   138  			Expect(pkgs).To(HaveLen(7))
   139  			assertPkgExists(testmodPkg, pkgs)
   140  			assertPkgExists(testmodPkg+"/subdir1", pkgs)
   141  			assertPkgExists(testmodPkg+"/subdir1/subdir1", pkgs)
   142  			assertPkgExists(testmodPkg+"/subdir1/subdir2", pkgs)
   143  			assertPkgExists(testmodPkg+"/subdir1/submod1", pkgs)
   144  			assertPkgExists(testmodPkg+"/submod1", pkgs)
   145  			assertPkgExists(testmodPkg+"/submod1/subdir1", pkgs)
   146  		})
   147  	})
   148  
   149  	Context("with roots=[./testmod/...]", func() {
   150  		It("should load seven packages", func() {
   151  			pkgs, err := loader.LoadRoots("./testmod/...")
   152  			Expect(err).ToNot(HaveOccurred())
   153  			Expect(pkgs).To(HaveLen(7))
   154  			assertPkgExists(testmodPkg, pkgs)
   155  			assertPkgExists(testmodPkg+"/subdir1", pkgs)
   156  			assertPkgExists(testmodPkg+"/subdir1/subdir1", pkgs)
   157  			assertPkgExists(testmodPkg+"/subdir1/subdir2", pkgs)
   158  			assertPkgExists(testmodPkg+"/subdir1/submod1", pkgs)
   159  			assertPkgExists(testmodPkg+"/submod1", pkgs)
   160  			assertPkgExists(testmodPkg+"/submod1/subdir1", pkgs)
   161  		})
   162  	})
   163  
   164  	Context("with roots=[./testmod/subdir1/submod1/...]", func() {
   165  		It("should load one package", func() {
   166  			pkgs, err := loader.LoadRoots("./testmod/subdir1/submod1/...")
   167  			Expect(err).ToNot(HaveOccurred())
   168  			Expect(pkgs).To(HaveLen(1))
   169  			assertPkgExists(testmodPkg+"/subdir1/submod1", pkgs)
   170  		})
   171  	})
   172  
   173  	Context("with roots=[./testmod, ./testmod/submod1]", func() {
   174  		It("should load two packages", func() {
   175  			pkgs, err := loader.LoadRoots("./testmod", "./testmod/submod1")
   176  			Expect(err).ToNot(HaveOccurred())
   177  			Expect(pkgs).To(HaveLen(2))
   178  			assertPkgExists(testmodPkg, pkgs)
   179  			assertPkgExists(testmodPkg+"/submod1", pkgs)
   180  		})
   181  	})
   182  
   183  	Context("with roots=[./testmod/submod1/subdir1/]", func() {
   184  		It("should load one package", func() {
   185  			pkgs, err := loader.LoadRoots("./testmod/submod1/subdir1/")
   186  			Expect(err).ToNot(HaveOccurred())
   187  			Expect(pkgs).To(HaveLen(1))
   188  			assertPkgExists(testmodPkg+"/submod1/subdir1", pkgs)
   189  		})
   190  	})
   191  })