Fix for upgrade -i, add more tests

Added a fix for upgrade --install
added more tests for loader, parser and upgrade cmd

Signed-off-by: Vlad Fratila <vfratila@adobe.com>
Signed-off-by: Matheus Hunsche <matheus.hunsche@ifood.com.br>
pull/8840/head
Vlad Fratila 5 years ago committed by Matheus Hunsche
parent 16b20936d9
commit 1eb4e3023e

@ -50,19 +50,19 @@ func TestInstall(t *testing.T) {
// Install, external file // Install, external file
{ {
name: "install with external files", name: "install with external files",
cmd: "install virgil testdata/testcharts/configmap --include-file external.txt=testdata/files/external.txt", cmd: "install virgil testdata/testcharts/external --include-file external.txt=testdata/files/external.txt",
golden: "output/install-with-external-files.txt", golden: "output/install-with-external-files.txt",
}, },
// Install, external dir // Install, external dir
{ {
name: "install with external dir", name: "install with external dir",
cmd: "install virgil testdata/testcharts/configmap --set glob.enabled=true --include-dir glob=testdata/files/", cmd: "install virgil testdata/testcharts/external --set glob.enabled=true --include-dir glob=testdata/files/",
golden: "output/install-with-external-files.txt", golden: "output/install-with-external-files.txt",
}, },
// Install, external glob files // Install, external glob files
{ {
name: "install with external globbed files", name: "install with external globbed files",
cmd: "install virgil testdata/testcharts/configmap --set glob.enabled=true --include-dir glob=testdata/files/external.*.conf", cmd: "install virgil testdata/testcharts/external --set glob.enabled=true --include-dir glob=testdata/files/external.*.conf",
golden: "output/install-with-external-files.txt", golden: "output/install-with-external-files.txt",
}, },
// Install, no hooks // Install, no hooks

@ -123,17 +123,17 @@ func TestTemplateCmd(t *testing.T) {
}, },
{ {
name: "chart with template with external file", name: "chart with template with external file",
cmd: fmt.Sprintf("template '%s' --set external=external.txt --include-file external.txt=testdata/files/external.txt", "testdata/testcharts/configmap"), cmd: fmt.Sprintf("template '%s' --set external=external.txt --include-file external.txt=testdata/files/external.txt", "testdata/testcharts/external"),
golden: "output/template-with-external-file.txt", golden: "output/template-with-external-file.txt",
}, },
{ {
name: "chart with template with external dir", name: "chart with template with external dir",
cmd: fmt.Sprintf("template '%s' --set glob.enabled=true --include-dir glob=testdata/files/", "testdata/testcharts/configmap"), cmd: fmt.Sprintf("template '%s' --set glob.enabled=true --include-dir glob=testdata/files/", "testdata/testcharts/external"),
golden: "output/template-with-external-dir.txt", golden: "output/template-with-external-dir.txt",
}, },
{ {
name: "chart with template with external globbed files", name: "chart with template with external globbed files",
cmd: fmt.Sprintf("template '%s' --set glob.enabled=true --include-dir glob=testdata/files/external.*.conf", "testdata/testcharts/configmap"), cmd: fmt.Sprintf("template '%s' --set glob.enabled=true --include-dir glob=testdata/files/external.*.conf", "testdata/testcharts/external"),
golden: "output/template-with-external-glob.txt", golden: "output/template-with-external-glob.txt",
}, },
} }

@ -100,6 +100,7 @@ func newUpgradeCmd(cfg *action.Configuration, out io.Writer) *cobra.Command {
instClient.PostRenderer = client.PostRenderer instClient.PostRenderer = client.PostRenderer
instClient.DisableOpenAPIValidation = client.DisableOpenAPIValidation instClient.DisableOpenAPIValidation = client.DisableOpenAPIValidation
instClient.SubNotes = client.SubNotes instClient.SubNotes = client.SubNotes
instClient.ExternalFiles = client.ExternalFiles
rel, err := runInstall(args, instClient, valueOpts, out) rel, err := runInstall(args, instClient, valueOpts, out)
if err != nil { if err != nil {

@ -343,6 +343,39 @@ func TestUpgradeInstallWithValuesFromStdin(t *testing.T) {
} }
func TestUpgradeWithExternalFile(t *testing.T) {
releaseName := "funny-bunny-v7"
exFiles := []*chart.File{
{Name: "external.txt", Data: []byte("from-external-file")},
}
relMock, ch, chartPath := prepareMockReleaseWithExternal(releaseName, exFiles, t)
defer resetEnv()()
store := storageFixture()
store.Create(relMock(releaseName, 3, ch))
cmd := fmt.Sprintf("upgrade %s --set glob.enabled=false --set external=external.txt '%s'", releaseName, chartPath)
_, _, err := executeActionCommandC(store, cmd)
if err != nil {
t.Errorf("unexpected error, got '%v'", err)
}
updatedRel, err := store.Get(releaseName, 4)
if err != nil {
t.Errorf("unexpected error, got '%v'", err)
}
if !strings.Contains(updatedRel.Manifest, "from-external-file") {
t.Errorf("The value is not set correctly. manifest: %s", updatedRel.Manifest)
}
}
func prepareMockRelease(releaseName string, t *testing.T) (func(n string, v int, ch *chart.Chart) *release.Release, *chart.Chart, string) { func prepareMockRelease(releaseName string, t *testing.T) (func(n string, v int, ch *chart.Chart) *release.Release, *chart.Chart, string) {
tmpChart := ensure.TempDir(t) tmpChart := ensure.TempDir(t)
configmapData, err := ioutil.ReadFile("testdata/testcharts/upgradetest/templates/configmap.yaml") configmapData, err := ioutil.ReadFile("testdata/testcharts/upgradetest/templates/configmap.yaml")
@ -378,6 +411,43 @@ func prepareMockRelease(releaseName string, t *testing.T) (func(n string, v int,
return relMock, ch, chartPath return relMock, ch, chartPath
} }
func prepareMockReleaseWithExternal(releaseName string, exFiles []*chart.File, t *testing.T) (func(n string, v int, ch *chart.Chart) *release.Release, *chart.Chart, string) {
tmpChart := ensure.TempDir(t)
configmapData, err := ioutil.ReadFile("testdata/testcharts/external/templates/config-map.yaml")
if err != nil {
t.Fatalf("Error loading template yaml %v", err)
}
cfile := &chart.Chart{
Metadata: &chart.Metadata{
APIVersion: chart.APIVersionV1,
Name: "testUpgradeChart",
Description: "A Helm chart for Kubernetes",
Version: "0.1.0",
},
Templates: []*chart.File{{Name: "templates/configmap.yaml", Data: configmapData}},
Files: exFiles,
}
chartPath := filepath.Join(tmpChart, cfile.Metadata.Name)
if err := chartutil.SaveDir(cfile, tmpChart); err != nil {
t.Fatalf("Error creating chart for upgrade: %v", err)
}
ch, err := loader.Load(chartPath)
if err != nil {
t.Fatalf("Error loading chart: %v", err)
}
_ = release.Mock(&release.MockReleaseOptions{
Name: releaseName,
Chart: ch,
})
relMock := func(n string, v int, ch *chart.Chart) *release.Release {
return release.Mock(&release.MockReleaseOptions{Name: n, Version: v, Chart: ch})
}
return relMock, ch, chartPath
}
func TestUpgradeOutputCompletion(t *testing.T) { func TestUpgradeOutputCompletion(t *testing.T) {
outputFlagCompletionTest(t, "upgrade") outputFlagCompletionTest(t, "upgrade")
} }

@ -0,0 +1,49 @@
/*
Copyright The Helm Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package loader
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestExpandLocalPath(t *testing.T) {
need := require.New(t)
is := assert.New(t)
glob, err := ExpandLocalPath("glob", "testdata/frobnitz/*.yaml")
need.NoError(err)
need.Contains(glob, "glob/Chart.yaml")
need.Contains(glob, "glob/values.yaml")
is.Equal("testdata/frobnitz/Chart.yaml", glob["glob/Chart.yaml"])
is.Equal("testdata/frobnitz/values.yaml", glob["glob/values.yaml"])
dir, err := ExpandLocalPath("dir", "testdata/albatross/")
need.NoError(err)
need.Contains(dir, "dir/Chart.yaml")
need.Contains(dir, "dir/values.yaml")
is.Equal("testdata/albatross/Chart.yaml", dir["dir/Chart.yaml"])
is.Equal("testdata/albatross/values.yaml", dir["dir/values.yaml"])
file, err := ExpandLocalPath("file", "testdata/albatross/Chart.yaml")
need.NoError(err)
need.Contains(file, "file")
is.Equal("testdata/albatross/Chart.yaml", file["file"])
}

@ -19,7 +19,6 @@ package files
import ( import (
"errors" "errors"
"fmt" "fmt"
"os"
"path/filepath" "path/filepath"
"strings" "strings"
) )
@ -51,19 +50,16 @@ func ParseGlobIntoString(g string, dest map[string]string) error {
} }
for k, g := range globs { for k, g := range globs {
if !strings.Contains(g, "*") { if !strings.Contains(g, "*") {
if _, err := os.Stat(g); os.IsNotExist(err) {
return err
}
// force glob style on simple directories // force glob style on simple directories
g = strings.TrimRight(g, "/") + "/*" g = strings.TrimRight(g, "/") + "/*"
} }
fmt.Println(g)
paths, err := filepath.Glob(g) paths, err := filepath.Glob(g)
if err != nil { if err != nil {
return err return err
} }
k = strings.TrimRight(k, "/")
for _, path := range paths { for _, path := range paths {
dest[fmt.Sprintf("%s/%s", k, filepath.Base(path))] = path dest[fmt.Sprintf("%s/%s", k, filepath.Base(path))] = path
} }

@ -55,3 +55,24 @@ func TestParseIntoString(t *testing.T) {
err = ParseIntoString(badFlag, dest) err = ParseIntoString(badFlag, dest)
is.NotNil(err) is.NotNil(err)
} }
func TestParseGlobIntoString(t *testing.T) {
need := require.New(t)
is := assert.New(t)
dest := make(map[string]string)
globFlagSlash := "glob/=testdata/foo/foo.*"
dirFlagNoSlash := "dir=testdata/foo/"
err := ParseGlobIntoString(globFlagSlash, dest)
need.NoError(err)
need.Contains(dest, "glob/foo.txt")
is.Equal("testdata/foo/foo.txt", dest["glob/foo.txt"])
err = ParseGlobIntoString(dirFlagNoSlash, dest)
need.NoError(err)
need.Contains(dest, "dir/foo.txt")
need.Contains(dest, "dir/bar.txt")
is.Equal("testdata/foo/foo.txt", dest["dir/foo.txt"])
is.Equal("testdata/foo/bar.txt", dest["dir/bar.txt"])
}

Loading…
Cancel
Save