...

Source file src/sigs.k8s.io/kustomize/api/krusty/transformerplugin_test.go

Documentation: sigs.k8s.io/kustomize/api/krusty

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package krusty_test
     5  
     6  import (
     7  	"testing"
     8  
     9  	kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
    10  	"sigs.k8s.io/kustomize/api/types"
    11  )
    12  
    13  func writeStringPrefixer(th *kusttest_test.HarnessEnhanced, path, name string) {
    14  	th.WriteF(path, `
    15  apiVersion: someteam.example.com/v1
    16  kind: StringPrefixer
    17  metadata:
    18    name: `+name+`
    19  `)
    20  }
    21  
    22  func TestPluginsNotEnabled(t *testing.T) {
    23  	th := kusttest_test.MakeEnhancedHarness(t).
    24  		BuildGoPlugin("someteam.example.com", "v1", "StringPrefixer")
    25  	defer th.Reset()
    26  
    27  	th.WriteK(".", `
    28  transformers:
    29  - stringPrefixer.yaml
    30  `)
    31  	writeStringPrefixer(th, "stringPrefixer.yaml", "apple")
    32  	err := th.RunWithErr(".", th.MakeOptionsPluginsDisabled())
    33  	if err == nil {
    34  		t.Fatalf("expected error")
    35  	}
    36  	if !types.IsErrOnlyBuiltinPluginsAllowed(err) {
    37  		t.Fatalf("unexpected err: %v", err)
    38  	}
    39  }
    40  
    41  func TestSedTransformer(t *testing.T) {
    42  	th := kusttest_test.MakeEnhancedHarness(t).
    43  		PrepExecPlugin("someteam.example.com", "v1", "SedTransformer")
    44  	defer th.Reset()
    45  
    46  	th.WriteK(".", `
    47  resources:
    48  - configmap.yaml
    49  
    50  transformers:
    51  - sed-transformer.yaml
    52  
    53  configMapGenerator:
    54  - name: test
    55    literals:
    56    - FOO=$FOO
    57    - BAR=$BAR
    58  `)
    59  	th.WriteF("sed-transformer.yaml", `
    60  apiVersion: someteam.example.com/v1
    61  kind: SedTransformer
    62  metadata:
    63    name: some-random-name
    64  argsFromFile: sed-input.txt
    65  `)
    66  	th.WriteF("sed-input.txt", `
    67  s/$FOO/foo/g
    68  s/$BAR/bar/g
    69  `)
    70  
    71  	th.WriteF("configmap.yaml", `
    72  apiVersion: v1
    73  kind: ConfigMap
    74  metadata:
    75    name: configmap-a
    76    annotations:
    77      fruit: peach
    78  data:
    79    foo: $FOO
    80  `)
    81  
    82  	m := th.Run(".", th.MakeOptionsPluginsEnabled())
    83  	th.AssertActualEqualsExpectedNoIdAnnotations(m, `
    84  apiVersion: v1
    85  data:
    86    foo: foo
    87  kind: ConfigMap
    88  metadata:
    89    annotations:
    90      fruit: peach
    91    name: configmap-a
    92  ---
    93  apiVersion: v1
    94  data:
    95    BAR: bar
    96    FOO: foo
    97  kind: ConfigMap
    98  metadata:
    99    name: test-6bc28fff49
   100  `)
   101  }
   102  
   103  /*
   104  
   105  The tests below are disabled until the StringPrefixer and DatePrefixer
   106  can be rewritten using kyaml, instead of depending on the
   107  PrefixSuffixTransformerPlugin.  That dependency is causing
   108  failures in the test loader.
   109  
   110  func writeDeployment(th *kusttest_test.HarnessEnhanced, path string) {
   111  	th.WriteF(path, `
   112  apiVersion: apps/v1
   113  kind: Deployment
   114  metadata:
   115    name: myDeployment
   116  spec:
   117    template:
   118      metadata:
   119        labels:
   120          backend: awesome
   121      spec:
   122        containers:
   123        - name: whatever
   124          image: whatever
   125  `)
   126  }
   127  
   128  func writeDatePrefixer(th *kusttest_test.HarnessEnhanced, path, name string) {
   129  	th.WriteF(path, `
   130  apiVersion: someteam.example.com/v1
   131  kind: DatePrefixer
   132  metadata:
   133    name: `+name+`
   134  `)
   135  }
   136  
   137  func TestOrderedTransformers(t *testing.T) {
   138  	th := kusttest_test.MakeEnhancedHarness(t).
   139  		BuildGoPlugin("someteam.example.com", "v1", "StringPrefixer").
   140  		BuildGoPlugin("someteam.example.com", "v1", "DatePrefixer")
   141  	defer th.Reset()
   142  
   143  	th.WriteK(".", `
   144  resources:
   145  - deployment.yaml
   146  transformers:
   147  - peachPrefixer.yaml
   148  - date1Prefixer.yaml
   149  - applePrefixer.yaml
   150  - date2Prefixer.yaml
   151  `)
   152  	writeDeployment(th, "deployment.yaml")
   153  	writeStringPrefixer(th, "applePrefixer.yaml", "apple")
   154  	writeStringPrefixer(th, "peachPrefixer.yaml", "peach")
   155  	writeDatePrefixer(th, "date1Prefixer.yaml", "date1")
   156  	writeDatePrefixer(th, "date2Prefixer.yaml", "date2")
   157  	m := th.Run(".", th.MakeOptionsPluginsEnabled())
   158  	th.AssertActualEqualsExpected(m, `
   159  apiVersion: apps/v1
   160  kind: Deployment
   161  metadata:
   162    name: 2018-05-11-apple-2018-05-11-peach-myDeployment
   163  spec:
   164    template:
   165      metadata:
   166        labels:
   167          backend: awesome
   168      spec:
   169        containers:
   170        - image: whatever
   171          name: whatever
   172  `)
   173  }
   174  
   175  func TestTransformedTransformers(t *testing.T) {
   176  	th := kusttest_test.MakeEnhancedHarness(t).
   177  		BuildGoPlugin("someteam.example.com", "v1", "StringPrefixer").
   178  		BuildGoPlugin("someteam.example.com", "v1", "DatePrefixer")
   179  	defer th.Reset()
   180  
   181  	th.WriteK("base", `
   182  resources:
   183  - stringPrefixer.yaml
   184  transformers:
   185  - datePrefixer.yaml
   186  `)
   187  	writeStringPrefixer(th, "base/stringPrefixer.yaml", "apple")
   188  	writeDatePrefixer(th, "base/datePrefixer.yaml", "date")
   189  
   190  	th.WriteK("overlay", `
   191  resources:
   192  - deployment.yaml
   193  transformers:
   194  - ../base
   195  `)
   196  	writeDeployment(th, "overlay/deployment.yaml")
   197  
   198  	m := th.Run("overlay", th.MakeOptionsPluginsEnabled())
   199  	th.AssertActualEqualsExpected(m, `
   200  apiVersion: apps/v1
   201  kind: Deployment
   202  metadata:
   203    name: 2018-05-11-apple-myDeployment
   204  spec:
   205    template:
   206      metadata:
   207        labels:
   208          backend: awesome
   209      spec:
   210        containers:
   211        - image: whatever
   212          name: whatever
   213  `)
   214  }
   215  */
   216  

View as plain text