...
1
16
17 package testing
18
19 import (
20 "os"
21 "sync"
22
23 openapi_v2 "github.com/google/gnostic-models/openapiv2"
24 openapi "k8s.io/kube-openapi/pkg/util/proto"
25 )
26
27
28
29 type Fake struct {
30 Path string
31
32 once sync.Once
33 document *openapi_v2.Document
34 err error
35 }
36
37
38 func (f *Fake) OpenAPISchema() (*openapi_v2.Document, error) {
39 f.once.Do(func() {
40 _, err := os.Stat(f.Path)
41 if err != nil {
42 f.err = err
43 return
44 }
45 spec, err := os.ReadFile(f.Path)
46 if err != nil {
47 f.err = err
48 return
49 }
50 f.document, f.err = openapi_v2.ParseDocument(spec)
51 })
52 return f.document, f.err
53 }
54
55 func getSchema(f *Fake, model string) (openapi.Schema, error) {
56 s, err := f.OpenAPISchema()
57 if err != nil {
58 return nil, err
59 }
60 m, err := openapi.NewOpenAPIData(s)
61 if err != nil {
62 return nil, err
63 }
64 return m.LookupModel(model), nil
65 }
66
67
68 func GetSchemaOrDie(f *Fake, model string) openapi.Schema {
69 s, err := getSchema(f, model)
70 if err != nil {
71 panic(err)
72 }
73 return s
74 }
75
View as plain text