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  }