...

Source file src/sigs.k8s.io/kustomize/kyaml/yaml/merge2/smpdirective_test.go

Documentation: sigs.k8s.io/kustomize/kyaml/yaml/merge2

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  package merge2
     4  
     5  import (
     6  	"strings"
     7  	"testing"
     8  
     9  	"sigs.k8s.io/kustomize/kyaml/yaml"
    10  )
    11  
    12  func Test_determineSmpDirective(t *testing.T) {
    13  	var cases = map[string]struct {
    14  		patch       string
    15  		elided      string
    16  		expected    smpDirective
    17  		errExpected string
    18  	}{
    19  		`scalar`: {
    20  			patch:       "dumb",
    21  			expected:    smpMerge,
    22  			errExpected: "no implemented strategic merge patch strategy",
    23  		},
    24  		`list merge`: {
    25  			patch: `
    26  - one
    27  - two
    28  - three
    29  - $patch: merge
    30  `,
    31  			expected: smpMerge,
    32  			elided: `- one
    33  - two
    34  - three
    35  `,
    36  		},
    37  		"list replace": {
    38  			patch: `
    39  - one
    40  - two
    41  - three
    42  - $patch: replace
    43  `,
    44  			expected: smpReplace,
    45  			elided: `- one
    46  - two
    47  - three
    48  `,
    49  		},
    50  		"list delete": {
    51  			patch: `
    52  - one
    53  - two
    54  - three
    55  - $patch: delete
    56  `,
    57  			expected: smpDelete,
    58  			elided: `- one
    59  - two
    60  - three
    61  `,
    62  		},
    63  		"list default": {
    64  			patch: `
    65  - one
    66  - two
    67  - three
    68  `,
    69  			expected: smpMerge,
    70  			elided: `- one
    71  - two
    72  - three
    73  `,
    74  		},
    75  		`map replace`: {
    76  			patch: `
    77  metal: heavy
    78  $patch: replace
    79  veggie: carrot
    80  `,
    81  			expected: smpReplace,
    82  			elided: `metal: heavy
    83  veggie: carrot
    84  `,
    85  		},
    86  		`map delete`: {
    87  			patch: `
    88  metal: heavy
    89  $patch: delete
    90  veggie: carrot
    91  `,
    92  			expected: smpDelete,
    93  			elided: `metal: heavy
    94  veggie: carrot
    95  `,
    96  		},
    97  		`map merge`: {
    98  			patch: `
    99  metal: heavy
   100  $patch: merge
   101  veggie: carrot
   102  `,
   103  			expected: smpMerge,
   104  			elided: `metal: heavy
   105  veggie: carrot
   106  `,
   107  		},
   108  		`map default`: {
   109  			patch: `
   110  metal: heavy
   111  veggie: carrot
   112  `,
   113  			expected: smpMerge,
   114  			elided: `metal: heavy
   115  veggie: carrot
   116  `,
   117  		},
   118  	}
   119  
   120  	for n := range cases {
   121  		tc := cases[n]
   122  		t.Run(n, func(t *testing.T) {
   123  			p, err := yaml.Parse(tc.patch)
   124  			if err != nil {
   125  				t.Fatalf("unexpected parse err %v", err)
   126  			}
   127  			unwrapped := yaml.NewRNode(p.YNode())
   128  			actual, err := determineSmpDirective(unwrapped)
   129  			if err == nil {
   130  				if tc.errExpected != "" {
   131  					t.Fatalf("should have seen an error")
   132  				}
   133  				if tc.expected != actual {
   134  					t.Fatalf("expected %s, got %s", tc.expected, actual)
   135  				}
   136  				if tc.elided != unwrapped.MustString() {
   137  					t.Fatalf(
   138  						"expected %s, got %s",
   139  						tc.elided, unwrapped.MustString())
   140  				}
   141  			} else {
   142  				if tc.errExpected == "" {
   143  					t.Fatalf("unexpected err: %v", err)
   144  				}
   145  				if !strings.Contains(err.Error(), tc.errExpected) {
   146  					t.Fatalf("expected some error other than:  %v", err)
   147  				}
   148  			}
   149  		})
   150  	}
   151  }
   152  

View as plain text