@@ -34,8 +34,8 @@ import (
3434
3535var _ = Describe ("CRD Generation proper defaulting" , func () {
3636 var (
37- ctx , ctx2 * genall.GenerationContext
38- out * outputRule
37+ ctx , ctx2 , ctx3 * genall.GenerationContext
38+ out * outputRule
3939
4040 genDir = filepath .Join ("testdata" , "gen" )
4141 )
@@ -53,7 +53,10 @@ var _ = Describe("CRD Generation proper defaulting", func() {
5353 Expect (pkgs ).To (HaveLen (1 ))
5454 pkgs2 , err := loader .LoadRoots ("./..." )
5555 Expect (err ).NotTo (HaveOccurred ())
56- Expect (pkgs2 ).To (HaveLen (2 ))
56+ Expect (pkgs2 ).To (HaveLen (3 ))
57+ pkgs3 , err := loader .LoadRoots ("./iface" )
58+ Expect (err ).NotTo (HaveOccurred ())
59+ Expect (pkgs3 ).To (HaveLen (1 ))
5760
5861 By ("setup up the context" )
5962 reg := & markers.Registry {}
@@ -73,6 +76,12 @@ var _ = Describe("CRD Generation proper defaulting", func() {
7376 Checker : & loader.TypeChecker {},
7477 OutputRule : out ,
7578 }
79+ ctx3 = & genall.GenerationContext {
80+ Collector : & markers.Collector {Registry : reg },
81+ Roots : pkgs3 ,
82+ Checker : & loader.TypeChecker {},
83+ OutputRule : out ,
84+ }
7685 })
7786
7887 It ("should fail to generate v1beta1 CRDs" , func () {
@@ -106,13 +115,15 @@ var _ = Describe("CRD Generation proper defaulting", func() {
106115 Expect (gen .Generate (ctx2 )).NotTo (HaveOccurred ())
107116
108117 By ("loading the desired YAMLs" )
118+ expectedFileIfaces , err := os .ReadFile (filepath .Join (genDir , "iface" , "iface.example.com_kindwithifaces.yaml" ))
119+ Expect (err ).NotTo (HaveOccurred ())
109120 expectedFileFoos , err := os .ReadFile (filepath .Join (genDir , "bar.example.com_foos.yaml" ))
110121 Expect (err ).NotTo (HaveOccurred ())
111122 expectedFileZoos , err := os .ReadFile (filepath .Join (genDir , "zoo" , "bar.example.com_zoos.yaml" ))
112123 Expect (err ).NotTo (HaveOccurred ())
113124
114- By ("comparing the two , output must be deterministic because groupKinds are sorted" )
115- expectedOut := string (expectedFileFoos ) + string (expectedFileZoos )
125+ By ("comparing the three , output must be deterministic because groupKinds are sorted" )
126+ expectedOut := string (expectedFileFoos ) + string (expectedFileIfaces ) + string ( expectedFileZoos )
116127 Expect (out .buf .String ()).To (Equal (expectedOut ), cmp .Diff (out .buf .String (), expectedOut ))
117128 })
118129
@@ -169,43 +180,25 @@ var _ = Describe("CRD Generation proper defaulting", func() {
169180 By ("comparing the two" )
170181 Expect (out .buf .String ()).To (Equal (string (expectedFile )), cmp .Diff (out .buf .String (), string (expectedFile )))
171182 })
172- })
173183
174- var _ = Describe ( "CRD Generation with any " , func () {
175- It ( "Works" , func () {
176- oldWorkingDir , err := os . Getwd ( )
184+ It ( "should gracefully error on interface types " , func () {
185+ gen := & crd. Generator {}
186+ err := gen . Generate ( ctx3 )
177187 Expect (err ).NotTo (HaveOccurred ())
178- const testModuleDir = "testdata2"
179- Expect (os .Chdir (testModuleDir )).To (Succeed ()) // go modules are directory-sensitive
180- defer func () {
181- Expect (os .Chdir (oldWorkingDir )).To (Succeed ())
182- }()
183188
184- pkgs , err := loader . LoadRoots ( "./v1/..." )
189+ wd , err := os . Getwd ( )
185190 Expect (err ).NotTo (HaveOccurred ())
186-
187- reg := & markers.Registry {}
188- Expect (crdmarkers .Register (reg )).To (Succeed ())
189- gen := & crd.Generator {}
190- out := & outputRule {
191- buf : & bytes.Buffer {},
191+ matches := 0
192+ for _ , pkg := range ctx3 .Roots {
193+ for _ , pkgError := range pkg .Errors {
194+ posRel , err := filepath .Rel (filepath .Join (wd , genDir ), pkgError .Pos )
195+ Expect (err ).NotTo (HaveOccurred ())
196+ Expect (posRel ).To (Equal ("iface/iface_types.go:32:6" ))
197+ Expect (pkgError .Msg ).To (Equal ("cannot generate schema for interface type any" ))
198+ matches ++
199+ }
192200 }
193- ctx := & genall.GenerationContext {
194- Collector : & markers.Collector {
195- Registry : reg ,
196- },
197- Roots : pkgs ,
198- Checker : & loader.TypeChecker {
199- NodeFilters : []loader.NodeFilter {gen .CheckFilter ()},
200- },
201- OutputRule : out ,
202- }
203- err = gen .Generate (ctx )
204- Expect (err ).NotTo (HaveOccurred ())
205- wantCRDYAML , err := os .ReadFile ("v1/example.com_foos.yaml" )
206- Expect (err ).NotTo (HaveOccurred ())
207- gotCRDYAML := out .buf .String ()
208- Expect (gotCRDYAML ).To (Equal (string (wantCRDYAML )), cmp .Diff (gotCRDYAML , string (wantCRDYAML )))
201+ Expect (matches ).To (Equal (1 ))
209202 })
210203})
211204
0 commit comments