...

Source file src/sigs.k8s.io/kustomize/kyaml/kio/filters/merge3_test.go

Documentation: sigs.k8s.io/kustomize/kyaml/kio/filters

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package filters_test
     5  
     6  import (
     7  	"path/filepath"
     8  	"runtime"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"sigs.k8s.io/kustomize/kyaml/copyutil"
    13  	"sigs.k8s.io/kustomize/kyaml/filesys"
    14  	"sigs.k8s.io/kustomize/kyaml/kio/filters"
    15  	"sigs.k8s.io/kustomize/kyaml/testutil"
    16  )
    17  
    18  func TestMerge3_Merge(t *testing.T) {
    19  	// TODO: make this test pass on windows -- currently failing due to comment whitespace changes
    20  	testutil.SkipWindows(t)
    21  
    22  	_, datadir, _, ok := runtime.Caller(0)
    23  	if !assert.True(t, ok) {
    24  		t.FailNow()
    25  	}
    26  	datadir = filepath.Join(filepath.Dir(datadir), "testdata")
    27  
    28  	// setup the local directory
    29  	dir := t.TempDir()
    30  
    31  	if !assert.NoError(t, copyutil.CopyDir(
    32  		filesys.MakeFsOnDisk(),
    33  		filepath.Join(datadir, "dataset1-localupdates"),
    34  		filepath.Join(dir, "dataset1"))) {
    35  		t.FailNow()
    36  	}
    37  
    38  	err := filters.Merge3{
    39  		OriginalPath: filepath.Join(datadir, "dataset1"),
    40  		UpdatedPath:  filepath.Join(datadir, "dataset1-remoteupdates"),
    41  		DestPath:     filepath.Join(dir, "dataset1"),
    42  		Matcher:      &filters.DefaultGVKNNMatcher{MergeOnPath: false},
    43  	}.Merge()
    44  	if !assert.NoError(t, err) {
    45  		t.FailNow()
    46  	}
    47  
    48  	diffs, err := copyutil.Diff(
    49  		filepath.Join(dir, "dataset1"),
    50  		filepath.Join(datadir, "dataset1-expected"))
    51  	if !assert.NoError(t, err) {
    52  		t.FailNow()
    53  	}
    54  	if !assert.Empty(t, diffs.List()) {
    55  		t.FailNow()
    56  	}
    57  }
    58  
    59  // TestMerge3_Merge_path tests that if the same resource is specified multiple times
    60  // with MergeOnPath, that the resources will be merged by the filepath name.
    61  func TestMerge3_Merge_path(t *testing.T) {
    62  	// TODO: make this test pass on windows -- currently failing due to comment whitespace changes
    63  	testutil.SkipWindows(t)
    64  
    65  	_, datadir, _, ok := runtime.Caller(0)
    66  	if !assert.True(t, ok) {
    67  		t.FailNow()
    68  	}
    69  	datadir = filepath.Join(filepath.Dir(datadir), "testdata2")
    70  
    71  	// setup the local directory
    72  	dir := t.TempDir()
    73  
    74  	if !assert.NoError(t, copyutil.CopyDir(
    75  		filesys.MakeFsOnDisk(),
    76  		filepath.Join(datadir, "dataset1-localupdates"),
    77  		filepath.Join(dir, "dataset1"))) {
    78  		t.FailNow()
    79  	}
    80  
    81  	err := filters.Merge3{
    82  		OriginalPath: filepath.Join(datadir, "dataset1"),
    83  		UpdatedPath:  filepath.Join(datadir, "dataset1-remoteupdates"),
    84  		DestPath:     filepath.Join(dir, "dataset1"),
    85  	}.Merge()
    86  	if !assert.NoError(t, err) {
    87  		t.FailNow()
    88  	}
    89  
    90  	diffs, err := copyutil.Diff(
    91  		filepath.Join(dir, "dataset1"),
    92  		filepath.Join(datadir, "dataset1-expected"))
    93  	if !assert.NoError(t, err) {
    94  		t.FailNow()
    95  	}
    96  	if !assert.Empty(t, diffs.List()) {
    97  		t.FailNow()
    98  	}
    99  }
   100  
   101  // TestMerge3_Merge_fail tests that if the same resource is defined multiple times
   102  // that merge will fail
   103  func TestMerge3_Merge_fail(t *testing.T) {
   104  	// TODO: make this test pass on windows -- currently failing due to comment whitespace changes
   105  	testutil.SkipWindows(t)
   106  
   107  	_, datadir, _, ok := runtime.Caller(0)
   108  	if !assert.True(t, ok) {
   109  		t.FailNow()
   110  	}
   111  	datadir = filepath.Join(filepath.Dir(datadir), "testdata2")
   112  
   113  	// setup the local directory
   114  	dir := t.TempDir()
   115  
   116  	if !assert.NoError(t, copyutil.CopyDir(
   117  		filesys.MakeFsOnDisk(),
   118  		filepath.Join(datadir, "dataset1-localupdates"),
   119  		filepath.Join(dir, "dataset1"))) {
   120  		t.FailNow()
   121  	}
   122  
   123  	err := filters.Merge3{
   124  		OriginalPath: filepath.Join(datadir, "dataset1"),
   125  		UpdatedPath:  filepath.Join(datadir, "dataset1-remoteupdates"),
   126  		DestPath:     filepath.Join(dir, "dataset1"),
   127  		Matcher:      &filters.DefaultGVKNNMatcher{MergeOnPath: false},
   128  	}.Merge()
   129  	if !assert.Error(t, err) {
   130  		t.FailNow()
   131  	}
   132  }
   133  

View as plain text