github.com/solo-io/service-mesh-hub@v0.9.2/test/utils/manifest.go (about) 1 package utils 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 8 "github.com/onsi/ginkgo" 9 10 "github.com/solo-io/go-utils/testutils" 11 "github.com/solo-io/skv2/codegen/model" 12 "github.com/solo-io/skv2/codegen/render" 13 "github.com/solo-io/skv2/codegen/util" 14 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 15 ) 16 17 const ( 18 perm = 0644 19 ) 20 21 type Manifest struct { 22 filename string 23 } 24 25 func NewManifest(filename string) (Manifest, error) { 26 manifest := Manifest{filename: filepath.Join(filepath.Dir(util.GoModPath()), "test/e2e/"+filename)} 27 err := manifest.CreateOrTruncate() 28 if err != nil { 29 return Manifest{}, err 30 } 31 return manifest, nil 32 } 33 34 func (m Manifest) KubeApply(namespace string) error { 35 return testutils.Kubectl("apply", "-n="+namespace, "-f="+m.filename) 36 } 37 38 func (m Manifest) KubeDelete(namespace string) error { 39 return testutils.Kubectl("delete", "-n="+namespace, "-f="+m.filename) 40 } 41 42 // Same as KubeDelete but ignore errors in case the test has already cleaned up associated resources. 43 // This method is just a safeguard for ensuring a clean test slate between unit tests. 44 func (m Manifest) Cleanup(namespace string) { 45 testutils.Kubectl("delete", "-n="+namespace, "-f="+m.filename) 46 } 47 48 func (m Manifest) AppendResources(resources ...metav1.Object) error { 49 // use skv2 libraries to write the resources as yaml 50 manifest, err := render.ManifestsRenderer{ 51 AppName: "bookinfo-policies", 52 ResourceFuncs: map[render.OutFile]render.MakeResourceFunc{ 53 render.OutFile{}: func(group render.Group) ([]metav1.Object, error) { 54 return resources, nil 55 }, 56 }, 57 }.RenderManifests(model.Group{RenderManifests: true}) 58 if err != nil { 59 return err 60 } 61 62 f, err := os.OpenFile(m.filename, os.O_APPEND|os.O_WRONLY, perm) 63 if err != nil { 64 return err 65 } 66 67 content := []byte(manifest[0].Content + "\n---\n") 68 69 _, err = f.Write(content) 70 if err != nil { 71 return err 72 } 73 fmt.Fprintf(ginkgo.GinkgoWriter, "appending to manifest: %s", content) 74 75 return nil 76 } 77 78 func (m Manifest) CreateOrTruncate() error { 79 _, err := os.OpenFile(m.filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) 80 return err 81 }