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  }