github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/utils/helper/yaml_test.go (about) 1 package helper 2 3 import ( 4 "github.com/caos/orbos/internal/utils/yaml" 5 "os" 6 "path/filepath" 7 "reflect" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 var ( 14 firstResource = &Resource{ 15 Kind: "test1", 16 ApiVersion: "api/v1", 17 Metadata: &Metadata{ 18 Name: "test1", 19 Namespace: "test", 20 }, 21 } 22 secondResource = &Resource{ 23 Kind: "test2", 24 ApiVersion: "api/v1", 25 Metadata: &Metadata{ 26 Name: "test2", 27 Namespace: "test", 28 }, 29 } 30 ) 31 32 type metadataTest struct { 33 Name string `yaml:"name"` 34 Namespace string `yaml:"namespace"` 35 } 36 type resourceTest struct { 37 Kind string `yaml:"kind"` 38 ApiVersion string `yaml:"apiVersion"` 39 Metadata *metadataTest `yaml:"metadata"` 40 } 41 42 func TestHelper_AddStructToYaml(t *testing.T) { 43 root := "/tmp/nonexistent" 44 err := os.MkdirAll(root, os.ModePerm) 45 assert.NoError(t, err) 46 47 path := "/tmp/nonexistent/test.yaml" 48 err = yaml.New(path).AddStruct(firstResource) 49 assert.NoError(t, err) 50 51 files := getFiles(root) 52 assert.Len(t, files, 1) 53 54 var restTest Resource 55 err = yaml.New(path).ToStruct(&restTest) 56 assert.NoError(t, err) 57 58 assert.True(t, reflect.DeepEqual(firstResource, &restTest)) 59 60 err = os.RemoveAll(root) 61 assert.NoError(t, err) 62 } 63 64 func TestHelper_AddStringToYaml(t *testing.T) { 65 root := "/tmp/nonexistent" 66 err := os.MkdirAll(root, os.ModePerm) 67 assert.NoError(t, err) 68 69 path := "/tmp/nonexistent/test.yaml" 70 err = yaml.New(path).AddString("test") 71 assert.NoError(t, err) 72 73 files := getFiles(root) 74 assert.Len(t, files, 1) 75 76 restTest, err := yaml.New(path).ToString() 77 assert.NoError(t, err) 78 79 assert.Equal(t, "test", restTest) 80 81 err = os.RemoveAll(root) 82 assert.NoError(t, err) 83 } 84 85 func TestHelper_AddStringObjectToYaml(t *testing.T) { 86 root := "/tmp/nonexistent" 87 err := os.MkdirAll(root, os.ModePerm) 88 assert.NoError(t, err) 89 90 path := "/tmp/nonexistent/test.yaml" 91 y := yaml.New(path) 92 err = y.AddStringObject("test: test") 93 assert.NoError(t, err) 94 95 files := getFiles(root) 96 assert.Len(t, files, 1) 97 98 restTest, err := y.ToString() 99 assert.NoError(t, err) 100 assert.Equal(t, "test: test", restTest) 101 102 err = os.RemoveAll(root) 103 assert.NoError(t, err) 104 } 105 106 func TestHelper_AddStringBeforePointForKindAndName(t *testing.T) { 107 root := "/tmp/nonexistent" 108 err := os.MkdirAll(root, os.ModePerm) 109 assert.NoError(t, err) 110 111 y := yaml.New("/tmp/nonexistent/test.yaml") 112 err = y.AddStruct(firstResource) 113 assert.NoError(t, err) 114 115 firstResourceTest := &resourceTest{ 116 Kind: firstResource.Kind, 117 ApiVersion: firstResource.ApiVersion, 118 Metadata: &metadataTest{ 119 Name: firstResource.Metadata.Name, 120 Namespace: "test", 121 }, 122 } 123 124 files := getFiles(root) 125 assert.Len(t, files, 1) 126 127 var restTest resourceTest 128 err = y.ToStruct(&restTest) 129 assert.NoError(t, err) 130 131 assert.True(t, reflect.DeepEqual(firstResourceTest, &restTest)) 132 133 err = os.RemoveAll(root) 134 assert.NoError(t, err) 135 } 136 137 func prepare(t *testing.T, dir, filename string) string { 138 path := filepath.Join(dir, filename) 139 err := os.MkdirAll(dir, os.ModePerm) 140 assert.NoError(t, err) 141 142 y := yaml.New(path) 143 err = y.AddStruct(firstResource) 144 assert.NoError(t, err) 145 err = y.AddStruct(secondResource) 146 assert.NoError(t, err) 147 148 files := getFiles(dir) 149 assert.Len(t, files, 1) 150 151 return path 152 } 153 154 func cleanup(t *testing.T, dir string) { 155 err := os.RemoveAll(dir) 156 assert.NoError(t, err) 157 } 158 159 func TestHelper_DeleteKindFromYaml_first(t *testing.T) { 160 root := "/tmp/nonexistent" 161 path := prepare(t, root, "test.yaml") 162 163 err := DeleteKindFromYaml(path, "test1") 164 assert.NoError(t, err) 165 166 var restTest Resource 167 err = yaml.New(path).ToStruct(&restTest) 168 assert.NoError(t, err) 169 170 assert.True(t, reflect.DeepEqual(secondResource, &restTest)) 171 172 cleanup(t, root) 173 } 174 175 func TestHelper_DeleteKindFromYaml_second(t *testing.T) { 176 root := "/tmp/nonexistent" 177 path := prepare(t, root, "test.yaml") 178 179 err := DeleteKindFromYaml(path, "test2") 180 assert.NoError(t, err) 181 182 var restTest Resource 183 err = yaml.New(path).ToStruct(&restTest) 184 assert.NoError(t, err) 185 186 assert.True(t, reflect.DeepEqual(firstResource, &restTest)) 187 188 cleanup(t, root) 189 } 190 191 func TestHelper_DeleteKindFromYaml_both(t *testing.T) { 192 root := "/tmp/nonexistent" 193 path := prepare(t, root, "test.yaml") 194 195 err := DeleteKindFromYaml(path, "test1") 196 assert.NoError(t, err) 197 198 err = DeleteKindFromYaml(path, "test2") 199 assert.NoError(t, err) 200 201 var restTest Resource 202 err = yaml.New(path).ToStruct(&restTest) 203 assert.Error(t, err) 204 205 assert.Empty(t, &restTest) 206 207 cleanup(t, root) 208 } 209 210 func TestHelper_DeleteFirstResourceFromYaml_first(t *testing.T) { 211 root := "/tmp/nonexistent" 212 path := prepare(t, root, "test.yaml") 213 214 err := DeleteFirstResourceFromYaml(path, "api/v1", "test1", "test1") 215 assert.NoError(t, err) 216 217 var restTest Resource 218 err = yaml.New(path).ToStruct(&restTest) 219 assert.NoError(t, err) 220 221 assert.True(t, reflect.DeepEqual(secondResource, &restTest)) 222 223 cleanup(t, root) 224 }