Files
kustomize/plugin/builtin/helmchartinflationgenerator/HelmChartInflationGenerator_test.go
Karl Isenberg 43868688d5 Use require for Error and NoError
Assert keeps going after failure, but require immediately fails
the tests, making it easier to find the output related to the test
failure, rather than having to comb through a bunch of subsequent
assertion failures. For equality tests, we may or may not want to
continue, but for error checks we almost always want to immediately
fail the test. Exceptions can be changed as-needed.
2024-03-20 13:19:18 -07:00

962 lines
22 KiB
Go

// Copyright 2022 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package main_test
import (
"fmt"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
"sigs.k8s.io/kustomize/kyaml/copyutil"
)
func TestHelmChartInflationGenerator(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: myPipeline
name: ocp-pipeline
namespace: mynamespace
version: 0.1.16
repo: https://bcgov.github.io/helm-charts
releaseName: moria
valuesInline:
releaseNamespace: ""
rbac:
create: true
rules:
- apiGroups: [""]
verbs: ["*"]
resouces: ["*"]
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: v1
data:
config: eyJleGFtcGxlIjoidmFsdWUifQ==
kind: Secret
metadata:
labels:
chart: ocp-pipeline-0.1.16
heritage: Helm
release: moria
name: moria-config
type: Opaque
---
apiVersion: v1
data:
WebHookSecretKey: MTIzNDU2Nzg=
kind: Secret
metadata:
labels:
chart: ocp-pipeline-0.1.16
heritage: Helm
release: moria
name: moria-git-webhook-secret
type: Opaque
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: moria-ocp-pipeline
namespace: mynamespace
rules:
- apiGroups:
- ""
resouces:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: moria-ocp-pipeline
namespace: mynamespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: moria-ocp-pipeline
subjects:
- kind: ServiceAccount
name: jenkins
namespace: mynamespace
---
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
labels:
app: ocp-pipeline
chart: ocp-pipeline-0.1.16
heritage: Helm
release: moria
name: moria-ocp-pipeline-deploy
namespace: null
spec:
nodeSelector: {}
resources:
limits:
cpu: 4000m
memory: 8G
requests:
cpu: 2000m
memory: 4G
strategy:
jenkinsPipelineStrategy:
jenkinsfile: |-
def helmName = "helm-v3.1.0-linux-amd64.tar.gz"
def chartName = "metadata-curator"
def chartRepo = "http://bcgov.github.io/helm-charts"
def releaseName = "mc"
def releaseNamespace = ""
def forceRecreate = "false"
def callAnotherPipe = "false"
def useEnv = "false"
def fromEnv = "commit"
def setFlag = "image.tag"
node("nodejs") {
stage("deploy (it's already built)") {
sh """
curl -L -O https://get.helm.sh/${helmName}
tar -zxvf ${helmName}
cd linux-amd64
curl -L -O https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux32
chmod ugo+x ./jq-linux32
npm install -g json2yaml
export CONF1=`+"`"+`oc get secret moria-config -o json | ./jq-linux32 .data.config`+"`"+`
export CONF2=`+"`"+`sed -e 's/^"//' -e 's/"\$//' <<<"\$CONF1"`+"`"+`
export CONF3=`+"`"+`echo \$CONF2 | base64 -d -`+"`"+`
export CONF=`+"`"+`echo \$CONF3 | json2yaml`+"`"+`
echo "\$CONF" > ./config.yaml
oc project ${releaseNamespace}
./helm repo add chart ${chartRepo}
./helm repo update
if [ "${forceRecreate}" = "true" ]; then
./helm upgrade ${releaseName} chart/${chartName} -f ./config.yaml --install --set hashLabel="${releaseName}\$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 32 | head -n 1)"
elif [ "${useEnv}" = "true" ]; then
./helm upgrade ${releaseName} chart/${chartName} -f ./config.yaml --install --set ${setFlag}=${env[fromEnv]}
else
./helm upgrade ${releaseName} chart/${chartName} -f ./config.yaml --install
fi
if [ "${callAnotherPipe}" = "true" ]; then
curl -d '' http://otherwebhookUrl
fi
"""
}
}
type: JenkinsPipeline
triggers:
- generic:
allowEnv: true
secretReference:
name: moria-git-webhook-secret
type: generic
status:
lastVersion: 0
`)
}
const expectedInflationFmt = `
apiVersion: v1
data:
rcon-password: Q0hBTkdFTUUh
kind: Secret
metadata:
labels:
app: moria-minecraft
chart: minecraft-3.1.3
heritage: Helm
release: moria
name: moria-minecraft
type: Opaque
---
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels:
app: moria-minecraft
chart: minecraft-3.1.3
heritage: Helm
release: moria
name: moria-minecraft
spec:
ports:
- name: minecraft
port: 25565
protocol: TCP
targetPort: minecraft
selector:
app: moria-minecraft
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels:
app: moria-minecraft
chart: minecraft-3.1.3
heritage: Helm
release: moria
name: moria-minecraft-rcon
spec:
ports:
- name: rcon
port: 25575
protocol: TCP
targetPort: rcon
selector:
app: moria-minecraft
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: moria-minecraft
chart: minecraft-3.1.3
heritage: Helm
release: moria
name: moria-minecraft
spec:
selector:
matchLabels:
app: moria-minecraft
strategy:
type: Recreate
template:
metadata:
labels:
app: moria-minecraft
spec:
containers:
- env:
- name: EULA
value: "true"
- name: TYPE
value: VANILLA
- name: VERSION
value: LATEST
- name: DIFFICULTY
value: %s
- name: WHITELIST
value: ""
- name: OPS
value: ""
- name: ICON
value: ""
- name: MAX_PLAYERS
value: "20"
- name: MAX_WORLD_SIZE
value: "10000"
- name: ALLOW_NETHER
value: "true"
- name: ANNOUNCE_PLAYER_ACHIEVEMENTS
value: "true"
- name: ENABLE_COMMAND_BLOCK
value: "true"
- name: FORCE_GAMEMODE
value: "false"
- name: GENERATE_STRUCTURES
value: "true"
- name: HARDCORE
value: "false"
- name: MAX_BUILD_HEIGHT
value: "256"
- name: MAX_TICK_TIME
value: "60000"
- name: SPAWN_ANIMALS
value: "true"
- name: SPAWN_MONSTERS
value: "true"
- name: SPAWN_NPCS
value: "true"
- name: VIEW_DISTANCE
value: "10"
- name: SEED
value: ""
- name: MODE
value: survival
- name: MOTD
value: Welcome to Minecraft on Kubernetes!
- name: PVP
value: "false"
- name: LEVEL_TYPE
value: DEFAULT
- name: GENERATOR_SETTINGS
value: ""
- name: LEVEL
value: world
- name: ONLINE_MODE
value: "true"
- name: MEMORY
value: 1024M
- name: JVM_OPTS
value: ""
- name: JVM_XX_OPTS
value: ""
- name: ENABLE_RCON
value: "true"
- name: RCON_PASSWORD
valueFrom:
secretKeyRef:
key: rcon-password
name: moria-minecraft
image: itzg/minecraft-server:latest
imagePullPolicy: Always
livenessProbe:
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 5
successThreshold: 1
tcpSocket:
port: 25565
timeoutSeconds: 1
name: moria-minecraft
ports:
- containerPort: 25565
name: minecraft
protocol: TCP
- containerPort: 25575
name: rcon
protocol: TCP
readinessProbe:
failureThreshold: 10
initialDelaySeconds: 30
periodSeconds: 5
successThreshold: 1
tcpSocket:
port: 25565
timeoutSeconds: 1
resources:
requests:
cpu: %dm
memory: %dMi
volumeMounts:
- mountPath: /data
name: datadir
securityContext:
fsGroup: 2000
runAsUser: 1000
volumes:
- emptyDir: {}
name: datadir
`
func TestHelmChartInflationGeneratorWithValuesInlineOverride(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: myMc
name: minecraft
version: 3.1.3
repo: https://itzg.github.io/minecraft-server-charts
releaseName: moria
valuesInline:
minecraftServer:
eula: true
difficulty: hard
rcon:
enabled: true
`)
th.AssertActualEqualsExpected(
rm, fmt.Sprintf(expectedInflationFmt,
"hard", // difficulty
500, // cpu
512, // memory
))
}
func TestHelmChartInflationGeneratorWithLocalValuesFile(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
th.WriteF(filepath.Join(th.GetRoot(), "myValues.yaml"), `
minecraftServer:
eula: true
difficulty: peaceful
rcon:
enabled: true
resources:
requests:
cpu: 888m
memory: 666Mi
`)
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: myMc
name: minecraft
version: 3.1.3
repo: https://itzg.github.io/minecraft-server-charts
releaseName: moria
valuesFile: myValues.yaml
`)
th.AssertActualEqualsExpected(
rm, fmt.Sprintf(expectedInflationFmt,
"peaceful", // difficulty
888, // cpu
666, // memory
))
}
func TestHelmChartInflationGeneratorWithInLineReplace(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: myMc
name: minecraft
version: 3.1.3
repo: https://itzg.github.io/minecraft-server-charts
releaseName: moria
valuesInline:
minecraftServer:
eula: true
difficulty: OMG_PLEASE_NO
rcon:
enabled: true
resources:
requests:
cpu: 555m
memory: 111Mi
valuesMerge: replace
`)
th.AssertActualEqualsExpected(
rm, fmt.Sprintf(expectedInflationFmt,
"OMG_PLEASE_NO", // difficulty
555, // cpu
111, // memory
))
}
func TestHelmChartInflationGeneratorWithIncludeCRDs(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
// we store this data outside of the _test.go file as its sort of huge
// and has backticks, which makes string literals wonky
testData, err := os.ReadFile("include_crds_testdata.txt")
if err != nil {
t.Error(fmt.Errorf("unable to read test data for includeCRDs: %w", err))
}
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: terraform
name: terraform
version: 1.0.0
repo: https://helm.releases.hashicorp.com
releaseName: terraforming-mars
includeCRDs: true
valuesInline:
global:
enabled: false
tests:
enabled: false
`)
th.AssertActualEqualsExpected(rm, string(testData))
}
func TestHelmChartInflationGeneratorWithExcludeCRDs(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
// we choose this helm chart as it has the ability to turn
// everything off, except CRDs.
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: terraform
name: terraform
version: 1.0.0
repo: https://helm.releases.hashicorp.com
releaseName: terraforming-mars
includeCRDs: false
valuesInline:
global:
enabled: false
tests:
enabled: false
`)
th.AssertActualEqualsExpected(rm, "")
}
func TestHelmChartInflationGeneratorWithSkipHooks(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
// we choose this helm chart as it has the ability to turn
// everything off, except CRDs.
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: terraform
name: terraform
version: 1.0.0
repo: https://helm.releases.hashicorp.com
releaseName: terraforming-mars
includeCRDs: false
skipHooks: true
valuesInline:
global:
enabled: false
`)
th.AssertActualEqualsExpected(rm, "")
}
func TestHelmChartInflationGeneratorWithIncludeCRDsNotSpecified(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: terraform
name: terraform
version: 1.0.0
repo: https://helm.releases.hashicorp.com
releaseName: terraforming-mars
valuesInline:
global:
enabled: false
tests:
enabled: false
`)
th.AssertActualEqualsExpected(rm, "")
}
func TestHelmChartInflationGeneratorIssue4905(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
copyTestChartsIntoHarness(t, th)
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: issue4905
name: issue4905
releaseName: issue4905
chartHome: ./charts
valuesInline:
config:
item1: 1
item2: 2
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: v1
data:
config.yaml: |-
item1: 1
item2: 2
kind: ConfigMap
metadata:
name: issue4905
`)
}
func TestHelmChartInflationGeneratorValuesOverride(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
copyTestChartsIntoHarness(t, th)
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: values-merge
name: values-merge
releaseName: values-merge
valuesMerge: override
valuesInline:
a: 4
c: 3
list:
- c
map:
a: 7
c: 6
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: test.kustomize.io/v1
kind: ValuesMergeTest
metadata:
name: values-merge
obj:
a: 4
b: 2
c: 3
list:
- c
map:
a: 7
b: 5
c: 6
`)
}
func TestHelmChartInflationGeneratorValuesReplace(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
copyTestChartsIntoHarness(t, th)
th.WriteF(filepath.Join(th.GetRoot(), "replacedValues.yaml"), `
a: 7
b: 7
c: 7
list:
- g
map:
a: 7
b: 7
c: 7
`)
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: values-merge
name: values-merge
releaseName: values-merge
valuesMerge: replace
valuesFile: replacedValues.yaml
valuesInline:
a: 1
b: 2
list:
- c
map:
a: 4
b: 5
`)
// replace option does not ignore values file from the chart
// it only replaces the values files specified in the kustomization
th.AssertActualEqualsExpected(rm, `
apiVersion: test.kustomize.io/v1
kind: ValuesMergeTest
metadata:
name: values-merge
obj:
a: 1
b: 2
c: null
list:
- c
map:
a: 4
b: 5
c: null
`)
}
func TestHelmChartInflationGeneratorValuesMerge(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
copyTestChartsIntoHarness(t, th)
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: values-merge
name: values-merge
releaseName: values-merge
valuesMerge: merge
valuesInline:
a: 4
c: 3
list:
- c
map:
a: 7
c: 6
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: test.kustomize.io/v1
kind: ValuesMergeTest
metadata:
name: values-merge
obj:
a: 1
b: 2
c: 3
list:
- a
- b
map:
a: 4
b: 5
c: 6
`)
}
func copyTestChartsIntoHarness(t *testing.T, th *kusttest_test.HarnessEnhanced) {
t.Helper()
thDir := filepath.Join(th.GetRoot(), "charts")
chartDir := "testdata/charts"
require.NoError(t, copyutil.CopyDir(th.GetFSys(), chartDir, thDir))
}
func TestHelmChartInflationGeneratorWithSameChartMultipleVersions(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
tests := []struct {
name string
chartName string
repo string
version string
releaseName string
}{
{
name: "terraform chart with no version grabs latest",
chartName: "terraform",
repo: "https://helm.releases.hashicorp.com",
version: "",
releaseName: "terraform-latest",
},
{
name: "terraform chart with version 1.1.1",
chartName: "terraform",
repo: "https://helm.releases.hashicorp.com",
version: "1.1.1",
releaseName: "terraform-1.1.1",
},
{
name: "terraform chart with version 1.1.1 again",
chartName: "terraform",
repo: "https://helm.releases.hashicorp.com",
version: "1.1.1",
releaseName: "terraform-1.1.1-1",
},
{
name: "terraform chart with version 1.1.2",
chartName: "terraform",
repo: "https://helm.releases.hashicorp.com",
version: "1.1.2",
releaseName: "terraform-1.1.2",
},
{
name: "terraform chart with version 1.1.2 but without repo",
chartName: "terraform",
version: "1.1.2",
releaseName: "terraform-1.1.2",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
config := fmt.Sprintf(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: %s
name: %s
version: %s
repo: %s
releaseName: %s
`, tt.chartName, tt.chartName, tt.version, tt.repo, tt.releaseName)
rm := th.LoadAndRunGenerator(config)
assert.True(t, len(rm.Resources()) > 0)
var chartDir string
if tt.version != "" && tt.repo != "" {
chartDir = fmt.Sprintf("charts/%s-%s/%s", tt.chartName, tt.version, tt.chartName)
} else {
chartDir = fmt.Sprintf("charts/%s", tt.chartName)
}
fmt.Printf("%s: %s\n", tt.name, chartDir)
d, err := th.GetFSys().ReadFile(filepath.Join(th.GetRoot(), chartDir, "Chart.yaml"))
if err != nil {
t.Fatal(err)
}
assert.Contains(t, string(d), fmt.Sprintf("name: %s", tt.chartName))
if tt.version != "" {
assert.Contains(t, string(d), fmt.Sprintf("version: %s", tt.version))
}
})
}
}
// Test that verifies +1 instances of same chart with different versions
// https://github.com/kubernetes-sigs/kustomize/issues/4813
func TestHelmChartInflationGeneratorWithMultipleInstancesSameChartDifferentVersions(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
podinfo1 := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: podinfo
name: podinfo
version: 6.2.1
repo: https://stefanprodan.github.io/podinfo
releaseName: podinfo1
`)
podinfo2 := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: podinfo
name: podinfo
version: 6.1.8
repo: https://stefanprodan.github.io/podinfo
releaseName: podinfo2
`)
podinfo1Img, err := podinfo1.Resources()[1].GetFieldValue("spec.template.spec.containers.0.image")
require.NoError(t, err)
assert.Equal(t, "ghcr.io/stefanprodan/podinfo:6.2.1", podinfo1Img)
podinfo2Img, err := podinfo2.Resources()[1].GetFieldValue("spec.template.spec.containers.0.image")
require.NoError(t, err)
assert.Equal(t, "ghcr.io/stefanprodan/podinfo:6.1.8", podinfo2Img)
podinfo1ChartsDir := filepath.Join(th.GetRoot(), "charts/podinfo-6.2.1/podinfo")
assert.True(t, th.GetFSys().Exists(podinfo1ChartsDir))
podinfo2ChartsDir := filepath.Join(th.GetRoot(), "charts/podinfo-6.1.8/podinfo")
assert.True(t, th.GetFSys().Exists(podinfo2ChartsDir))
podinfo1ChartContents, err := th.GetFSys().ReadFile(filepath.Join(podinfo1ChartsDir, "Chart.yaml"))
require.NoError(t, err)
assert.Contains(t, string(podinfo1ChartContents), "version: 6.2.1")
podinfo2ChartContents, err := th.GetFSys().ReadFile(filepath.Join(podinfo2ChartsDir, "Chart.yaml"))
require.NoError(t, err)
assert.Contains(t, string(podinfo2ChartContents), "version: 6.1.8")
}
// Reference: https://github.com/kubernetes-sigs/kustomize/issues/5163
func TestHelmChartInflationGeneratorUsingVersionWithoutRepo(t *testing.T) {
th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t).
PrepBuiltin("HelmChartInflationGenerator")
defer th.Reset()
if err := th.ErrIfNoHelm(); err != nil {
t.Skip("skipping: " + err.Error())
}
copyTestChartsIntoHarness(t, th)
rm := th.LoadAndRunGenerator(`
apiVersion: builtin
kind: HelmChartInflationGenerator
metadata:
name: test-chart
name: test-chart
version: 1.0.0
releaseName: test
chartHome: ./charts
`)
cm, err := rm.Resources()[0].GetFieldValue("metadata.name")
require.NoError(t, err)
assert.Equal(t, "bar", cm)
chartDir := filepath.Join(th.GetRoot(), "charts/test-chart")
assert.True(t, th.GetFSys().Exists(chartDir))
chartYamlContent, err := th.GetFSys().ReadFile(filepath.Join(chartDir, "Chart.yaml"))
require.NoError(t, err)
assert.Contains(t, string(chartYamlContent), "name: test-chart")
assert.Contains(t, string(chartYamlContent), "version: 1.0.0")
}