Files
paralus/components/common/pkg/controller/runtime/object_test.go
2022-02-22 11:41:48 +05:30

221 lines
3.8 KiB
Go

package runtime
import (
"encoding/json"
"io/ioutil"
"os"
"reflect"
"testing"
apiv2 "github.com/RafaySystems/rcloud-base/components/common/proto/types/controller"
appsv1 "k8s.io/api/apps/v1"
"sigs.k8s.io/yaml"
)
func loadStepObject(path string) (*apiv2.StepObject, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
yb, err := ioutil.ReadAll(f)
if err != nil {
return nil, err
}
jb, err := yaml.YAMLToJSON(yb)
if err != nil {
return nil, err
}
var so apiv2.StepObject
err = json.Unmarshal(jb, &so)
if err != nil {
return nil, err
}
return &so, nil
}
func TestConfigMap(t *testing.T) {
so, err := loadStepObject("./testdata/configmap.yaml")
if err != nil {
t.Error(err)
return
}
accessor, err := so.Accessor()
if err != nil {
t.Error(err)
return
}
apiVersion, err := accessor.APIVersion()
if err != nil {
t.Error(err)
return
}
kind, err := accessor.Kind()
if err != nil {
t.Error(err)
return
}
name, err := accessor.Name()
if err != nil {
t.Error(err)
return
}
if apiVersion != "v1" && kind != "ConfigMap" {
t.Error("expected ", "v1/ConfigMap")
return
}
if name != "example-config" {
t.Error("expected name example-config, got", so.Name)
}
_, _, err = ToObject(so)
if err != nil {
t.Error(err)
return
}
}
func TestUnstructured(t *testing.T) {
so, err := loadStepObject("./testdata/unstructured1.yaml")
if err != nil {
t.Error(err)
return
}
_, _, err = ToObject(so)
if err != nil {
t.Error(err)
return
}
}
func TestStructuredPatch(t *testing.T) {
so, err := loadStepObject("./testdata/deployment1.yaml")
if err != nil {
t.Error(err)
return
}
with, err := loadStepObject("./testdata/deployment2.yaml")
if err != nil {
t.Error(err)
return
}
err = Patch(so, with, AddAnnotations(map[string]string{"test": "test2"}))
if err != nil {
t.Error(err)
return
}
t.Log(string(so.Raw))
ro, _, err := ToObject(so)
if err != nil {
t.Error(err)
return
}
if d, ok := ro.(*appsv1.Deployment); ok {
if *d.Spec.Replicas != 2 {
t.Error("expected 2 replicas")
return
}
if !reflect.DeepEqual(d.Annotations, map[string]string{"test": "test2"}) {
t.Error("expected test: test2 got ", d.Annotations)
return
}
containers := d.Spec.Template.Spec.Containers
if len(containers) != 2 {
t.Error("expected 2 containers")
return
}
if containers[0].Name != "side-car" {
t.Error("expected side car container")
return
}
if containers[1].Name != "nginx" {
t.Error("expected nginx container")
return
}
if containers[1].Image != "nginx:1.7.10" {
t.Error("expected nginx image nginx:1.7.10")
return
}
} else {
t.Error("exptected appsv1.Deployment got, ", reflect.TypeOf(ro))
}
}
func TestUnstructuredPatch(t *testing.T) {
so, err := loadStepObject("./testdata/unstructured1.yaml")
if err != nil {
t.Error(err)
return
}
with, err := loadStepObject("./testdata/unstructured2.yaml")
if err != nil {
t.Error(err)
return
}
err = Patch(so, with)
if err != nil {
t.Error(err)
return
}
}
func TestPartialPath(t *testing.T) {
// so, err := loadStepObject("./testdata/etcd.yaml")
// if err != nil {
// t.Error(err)
// return
// }
// with, err := loadStepObject("./testdata/etcd-patch.yaml")
// if err != nil {
// t.Error(err)
// return
// }
// err = Patch(so, with, AddAnnotations(map[string]string{"test": "test"}))
// if err != nil {
// t.Error(err)
// return
// }
//t.Log(string(so.Raw))
so1, err := loadStepObject("./testdata/statefulset.yaml")
if err != nil {
t.Error(err)
return
}
with1, err := loadStepObject("./testdata/statefulset-patch.yaml")
if err != nil {
t.Error(err)
return
}
err = Patch(so1, with1, AddAnnotations(map[string]string{"test": "test"}))
if err != nil {
t.Error(err)
return
}
t.Log(string(so1.Raw))
}