mirror of
https://github.com/helm/helm.git
synced 2026-02-20 00:13:02 -05:00
ref(tests): simplify cmd test setup/teardown
Ensure proper cleanup of `HELM_HOME` and `HELM_DEBUG`
This commit is contained in:
parent
34da765eff
commit
a02a598c33
42 changed files with 432 additions and 830 deletions
2
Makefile
2
Makefile
|
|
@ -74,7 +74,7 @@ test: test-unit
|
|||
test-unit:
|
||||
@echo
|
||||
@echo "==> Running unit tests <=="
|
||||
HELM_HOME=/no/such/dir $(GO) test $(GOFLAGS) -run $(TESTS) $(PKG) $(TESTFLAGS)
|
||||
HELM_HOME=/no_such_dir $(GO) test $(GOFLAGS) -run $(TESTS) $(PKG) $(TESTFLAGS)
|
||||
|
||||
.PHONY: test-style
|
||||
test-style:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ import (
|
|||
|
||||
"k8s.io/helm/pkg/chartutil"
|
||||
"k8s.io/helm/pkg/hapi/chart"
|
||||
"k8s.io/helm/pkg/helm/helmpath"
|
||||
)
|
||||
|
||||
const createDesc = `
|
||||
|
|
@ -51,11 +50,7 @@ will be overwritten, but other files will be left alone.
|
|||
|
||||
type createOptions struct {
|
||||
starter string // --starter
|
||||
|
||||
// args
|
||||
name string
|
||||
|
||||
home helmpath.Home
|
||||
name string
|
||||
}
|
||||
|
||||
func newCreateCmd(out io.Writer) *cobra.Command {
|
||||
|
|
@ -66,7 +61,6 @@ func newCreateCmd(out io.Writer) *cobra.Command {
|
|||
Short: "create a new chart with the given name",
|
||||
Long: createDesc,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
o.home = settings.Home
|
||||
if len(args) == 0 {
|
||||
return errors.New("the name of the new chart is required")
|
||||
}
|
||||
|
|
@ -93,7 +87,7 @@ func (o *createOptions) run(out io.Writer) error {
|
|||
|
||||
if o.starter != "" {
|
||||
// Create from the starter
|
||||
lstarter := filepath.Join(o.home.Starters(), o.starter)
|
||||
lstarter := filepath.Join(settings.Home.Starters(), o.starter)
|
||||
return chartutil.CreateFrom(cfile, filepath.Dir(o.name), lstarter)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,23 +28,10 @@ import (
|
|||
)
|
||||
|
||||
func TestCreateCmd(t *testing.T) {
|
||||
cname := "testchart"
|
||||
// Make a temp dir
|
||||
tdir, err := ioutil.TempDir("", "helm-create-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(tdir)
|
||||
tdir := testTempDir(t)
|
||||
defer testChdir(t, tdir)()
|
||||
|
||||
// CD into it
|
||||
pwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.Chdir(tdir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Chdir(pwd)
|
||||
cname := "testchart"
|
||||
|
||||
// Run a create
|
||||
if _, err := executeCommand(nil, "create "+cname); err != nil {
|
||||
|
|
@ -73,28 +60,17 @@ func TestCreateCmd(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestCreateStarterCmd(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
cname := "testchart"
|
||||
// Make a temp dir
|
||||
tdir, err := ioutil.TempDir("", "helm-create-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(tdir)
|
||||
tdir := testTempDir(t)
|
||||
|
||||
thome, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
}()
|
||||
|
||||
settings.Home = thome
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
// Create a starter.
|
||||
starterchart := filepath.Join(thome.String(), "starters")
|
||||
starterchart := hh.Starters()
|
||||
os.Mkdir(starterchart, 0755)
|
||||
if dest, err := chartutil.Create(&chart.Metadata{Name: "starterchart"}, starterchart); err != nil {
|
||||
t.Fatalf("Could not create chart: %s", err)
|
||||
|
|
@ -106,18 +82,10 @@ func TestCreateStarterCmd(t *testing.T) {
|
|||
t.Fatalf("Could not write template: %s", err)
|
||||
}
|
||||
|
||||
// CD into it
|
||||
pwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.Chdir(tdir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Chdir(pwd)
|
||||
defer testChdir(t, tdir)()
|
||||
|
||||
// Run a create
|
||||
if _, err := executeCommand(nil, fmt.Sprintf("--home=%s create --starter=starterchart %s", thome, cname)); err != nil {
|
||||
if _, err := executeCommand(nil, fmt.Sprintf("--home=%s create --starter=starterchart %s", hh, cname)); err != nil {
|
||||
t.Errorf("Failed to run create: %s", err)
|
||||
return
|
||||
}
|
||||
|
|
@ -149,9 +117,8 @@ func TestCreateStarterCmd(t *testing.T) {
|
|||
for _, tpl := range c.Templates {
|
||||
if tpl.Name == "templates/foo.tpl" {
|
||||
found = true
|
||||
data := tpl.Data
|
||||
if string(data) != "test" {
|
||||
t.Errorf("Expected template 'test', got %q", string(data))
|
||||
if data := string(tpl.Data); data != "test" {
|
||||
t.Errorf("Expected template 'test', got %q", data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ func TestDelete(t *testing.T) {
|
|||
|
||||
rels := []*release.Release{helm.ReleaseMock(&helm.MockReleaseOptions{Name: "aeneas"})}
|
||||
|
||||
tests := []releaseCase{
|
||||
tests := []cmdTestCase{
|
||||
{
|
||||
name: "basic delete",
|
||||
cmd: "delete aeneas",
|
||||
|
|
@ -59,5 +59,5 @@ func TestDelete(t *testing.T) {
|
|||
wantError: true,
|
||||
},
|
||||
}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import (
|
|||
|
||||
"k8s.io/helm/pkg/downloader"
|
||||
"k8s.io/helm/pkg/getter"
|
||||
"k8s.io/helm/pkg/helm/helmpath"
|
||||
)
|
||||
|
||||
const dependencyBuildDesc = `
|
||||
|
|
@ -40,10 +39,7 @@ type dependencyBuildOptions struct {
|
|||
keyring string // --keyring
|
||||
verify bool // --verify
|
||||
|
||||
// args
|
||||
chartpath string
|
||||
|
||||
helmhome helmpath.Home
|
||||
}
|
||||
|
||||
func newDependencyBuildCmd(out io.Writer) *cobra.Command {
|
||||
|
|
@ -56,7 +52,6 @@ func newDependencyBuildCmd(out io.Writer) *cobra.Command {
|
|||
Short: "rebuild the charts/ directory based on the requirements.lock file",
|
||||
Long: dependencyBuildDesc,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
o.helmhome = settings.Home
|
||||
if len(args) > 0 {
|
||||
o.chartpath = args[0]
|
||||
}
|
||||
|
|
@ -75,7 +70,7 @@ func (o *dependencyBuildOptions) run(out io.Writer) error {
|
|||
man := &downloader.Manager{
|
||||
Out: out,
|
||||
ChartPath: o.chartpath,
|
||||
HelmHome: o.helmhome,
|
||||
HelmHome: settings.Home,
|
||||
Keyring: o.keyring,
|
||||
Getters: getter.All(settings),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,22 +27,14 @@ import (
|
|||
)
|
||||
|
||||
func TestDependencyBuildCmd(t *testing.T) {
|
||||
hh, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(hh.String())
|
||||
cleanup()
|
||||
}()
|
||||
defer resetEnv()()
|
||||
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
srv := repotest.NewServer(hh.String())
|
||||
defer srv.Stop()
|
||||
_, err = srv.CopyCharts("testdata/testcharts/*.tgz")
|
||||
if err != nil {
|
||||
if _, err := srv.CopyCharts("testdata/testcharts/*.tgz"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import (
|
|||
)
|
||||
|
||||
func TestDependencyListCmd(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "No such chart",
|
||||
cmd: "dependency list /no/such/chart",
|
||||
golden: "output/dependency-list-no-chart.txt",
|
||||
|
|
@ -38,5 +38,5 @@ func TestDependencyListCmd(t *testing.T) {
|
|||
cmd: "dependency list testdata/testcharts/reqtest-0.1.0.tgz",
|
||||
golden: "output/dependency-list-archive.txt",
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,16 +35,9 @@ import (
|
|||
)
|
||||
|
||||
func TestDependencyUpdateCmd(t *testing.T) {
|
||||
hh, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(hh.String())
|
||||
cleanup()
|
||||
}()
|
||||
defer resetEnv()()
|
||||
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
srv := repotest.NewServer(hh.String())
|
||||
|
|
@ -125,16 +118,9 @@ func TestDependencyUpdateCmd(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDependencyUpdateCmd_SkipRefresh(t *testing.T) {
|
||||
hh, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(hh.String())
|
||||
cleanup()
|
||||
}()
|
||||
defer resetEnv()()
|
||||
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
srv := repotest.NewServer(hh.String())
|
||||
|
|
@ -163,16 +149,9 @@ func TestDependencyUpdateCmd_SkipRefresh(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestDependencyUpdateCmd_DontDeleteOldChartsOnError(t *testing.T) {
|
||||
hh, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(hh.String())
|
||||
cleanup()
|
||||
}()
|
||||
defer resetEnv()()
|
||||
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
srv := repotest.NewServer(hh.String())
|
||||
|
|
|
|||
|
|
@ -28,20 +28,14 @@ import (
|
|||
)
|
||||
|
||||
func TestFetchCmd(t *testing.T) {
|
||||
hh, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(hh.String())
|
||||
cleanup()
|
||||
}()
|
||||
defer resetEnv()()
|
||||
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
srv := repotest.NewServer(hh.String())
|
||||
defer srv.Stop()
|
||||
|
||||
settings.Home = hh
|
||||
|
||||
// all flags will get "--home=TMDIR -d outdir" appended.
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
@ -131,7 +125,7 @@ func TestFetchCmd(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
outdir := filepath.Join(hh.String(), "testout")
|
||||
outdir := hh.Path("testout")
|
||||
os.RemoveAll(outdir)
|
||||
os.Mkdir(outdir, 0755)
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestGetHooks(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "get hooks with release",
|
||||
cmd: "get hooks aeneas",
|
||||
golden: "output/get-hooks.txt",
|
||||
|
|
@ -35,5 +35,5 @@ func TestGetHooks(t *testing.T) {
|
|||
golden: "output/get-hooks-no-args.txt",
|
||||
wantError: true,
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestGetManifest(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "get manifest with release",
|
||||
cmd: "get manifest juno",
|
||||
golden: "output/get-manifest.txt",
|
||||
|
|
@ -35,5 +35,5 @@ func TestGetManifest(t *testing.T) {
|
|||
golden: "output/get-manifest-no-args.txt",
|
||||
wantError: true,
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestGetCmd(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "get with a release",
|
||||
cmd: "get thomas-guide",
|
||||
golden: "output/get-release.txt",
|
||||
|
|
@ -35,5 +35,5 @@ func TestGetCmd(t *testing.T) {
|
|||
golden: "output/get-no-args.txt",
|
||||
wantError: true,
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestGetValuesCmd(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "get values with a release",
|
||||
cmd: "get values thomas-guide",
|
||||
golden: "output/get-values.txt",
|
||||
|
|
@ -35,5 +35,5 @@ func TestGetValuesCmd(t *testing.T) {
|
|||
golden: "output/get-values-args.txt",
|
||||
wantError: true,
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,14 +18,12 @@ package main // import "k8s.io/helm/cmd/helm"
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
// Import to initialize client auth plugins.
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
|
|
@ -42,83 +40,6 @@ var (
|
|||
configOnce sync.Once
|
||||
)
|
||||
|
||||
var globalUsage = `The Kubernetes package manager
|
||||
|
||||
To begin working with Helm, run the 'helm init' command:
|
||||
|
||||
$ helm init
|
||||
|
||||
This will set up any necessary local configuration.
|
||||
|
||||
Common actions from this point include:
|
||||
|
||||
- helm search: search for charts
|
||||
- helm fetch: download a chart to your local directory to view
|
||||
- helm install: upload the chart to Kubernetes
|
||||
- helm list: list releases of charts
|
||||
|
||||
Environment:
|
||||
$HELM_HOME set an alternative location for Helm files. By default, these are stored in ~/.helm
|
||||
$HELM_NO_PLUGINS disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins.
|
||||
$KUBECONFIG set an alternative Kubernetes configuration file (default "~/.kube/config")
|
||||
`
|
||||
|
||||
func newRootCmd(c helm.Interface, out io.Writer, args []string) *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "helm",
|
||||
Short: "The Helm package manager for Kubernetes.",
|
||||
Long: globalUsage,
|
||||
SilenceUsage: true,
|
||||
}
|
||||
flags := cmd.PersistentFlags()
|
||||
|
||||
settings.AddFlags(flags)
|
||||
|
||||
cmd.AddCommand(
|
||||
// chart commands
|
||||
newCreateCmd(out),
|
||||
newDependencyCmd(out),
|
||||
newFetchCmd(out),
|
||||
newInspectCmd(out),
|
||||
newLintCmd(out),
|
||||
newPackageCmd(out),
|
||||
newRepoCmd(out),
|
||||
newSearchCmd(out),
|
||||
newVerifyCmd(out),
|
||||
|
||||
// release commands
|
||||
newDeleteCmd(c, out),
|
||||
newGetCmd(c, out),
|
||||
newHistoryCmd(c, out),
|
||||
newInstallCmd(c, out),
|
||||
newListCmd(c, out),
|
||||
newReleaseTestCmd(c, out),
|
||||
newRollbackCmd(c, out),
|
||||
newStatusCmd(c, out),
|
||||
newUpgradeCmd(c, out),
|
||||
|
||||
newCompletionCmd(out),
|
||||
newHomeCmd(out),
|
||||
newInitCmd(out),
|
||||
newPluginCmd(out),
|
||||
newTemplateCmd(out),
|
||||
newVersionCmd(out),
|
||||
|
||||
// Hidden documentation generator command: 'helm docs'
|
||||
newDocsCmd(out),
|
||||
)
|
||||
|
||||
flags.Parse(args)
|
||||
|
||||
// set defaults from environment
|
||||
settings.Init(flags)
|
||||
|
||||
// Find and add plugins
|
||||
loadPlugins(cmd, out)
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
func init() {
|
||||
log.SetFlags(log.Lshortfile)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,12 +20,10 @@ import (
|
|||
"bytes"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
shellwords "github.com/mattn/go-shellwords"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"k8s.io/helm/internal/test"
|
||||
|
|
@ -35,6 +33,66 @@ import (
|
|||
"k8s.io/helm/pkg/repo"
|
||||
)
|
||||
|
||||
// base temp directory
|
||||
var testingDir string
|
||||
|
||||
func init() {
|
||||
var err error
|
||||
testingDir, err = ioutil.TempDir(testingDir, "helm")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
os.Unsetenv("HELM_HOME")
|
||||
|
||||
exitCode := m.Run()
|
||||
os.RemoveAll(testingDir)
|
||||
os.Exit(exitCode)
|
||||
}
|
||||
|
||||
func testTempDir(t *testing.T) string {
|
||||
t.Helper()
|
||||
d, err := ioutil.TempDir(testingDir, "helm")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
func runTestCmd(t *testing.T, tests []cmdTestCase) {
|
||||
t.Helper()
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
c := &helm.FakeClient{
|
||||
Rels: tt.rels,
|
||||
TestRunStatus: tt.testRunStatus,
|
||||
}
|
||||
out, err := executeCommand(c, tt.cmd)
|
||||
if (err != nil) != tt.wantError {
|
||||
t.Errorf("expected error, got '%v'", err)
|
||||
}
|
||||
if tt.golden != "" {
|
||||
test.AssertGoldenString(t, out, tt.golden)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// cmdTestCase describes a test case that works with releases.
|
||||
type cmdTestCase struct {
|
||||
name string
|
||||
cmd string
|
||||
golden string
|
||||
wantError bool
|
||||
// Rels are the available releases at the start of the test.
|
||||
rels []*release.Release
|
||||
testRunStatus map[string]release.TestRunStatus
|
||||
}
|
||||
|
||||
func executeCommand(c helm.Interface, cmd string) (string, error) {
|
||||
_, output, err := executeCommandC(c, cmd)
|
||||
return output, err
|
||||
|
|
@ -55,59 +113,8 @@ func executeCommandC(client helm.Interface, cmd string) (*cobra.Command, string,
|
|||
return c, buf.String(), err
|
||||
}
|
||||
|
||||
func testReleaseCmd(t *testing.T, tests []releaseCase) {
|
||||
t.Helper()
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
c := &helm.FakeClient{
|
||||
Rels: tt.rels,
|
||||
TestRunStatus: tt.testRunStatus,
|
||||
}
|
||||
out, err := executeCommand(c, tt.cmd)
|
||||
if (err != nil) != tt.wantError {
|
||||
t.Errorf("expected error, got '%v'", err)
|
||||
}
|
||||
if tt.golden != "" {
|
||||
test.AssertGoldenString(t, out, tt.golden)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// releaseCase describes a test case that works with releases.
|
||||
type releaseCase struct {
|
||||
name string
|
||||
cmd string
|
||||
golden string
|
||||
wantError bool
|
||||
// Rels are the available releases at the start of the test.
|
||||
rels []*release.Release
|
||||
testRunStatus map[string]release.TestRunStatus
|
||||
}
|
||||
|
||||
// tempHelmHome sets up a Helm Home in a temp dir.
|
||||
//
|
||||
// This does not clean up the directory. You must do that yourself.
|
||||
// You must also set helmHome yourself.
|
||||
func tempHelmHome(t *testing.T) (helmpath.Home, error) {
|
||||
oldhome := settings.Home
|
||||
dir, err := ioutil.TempDir("", "helm_home-")
|
||||
if err != nil {
|
||||
return helmpath.Home("n/"), err
|
||||
}
|
||||
|
||||
settings.Home = helmpath.Home(dir)
|
||||
if err := ensureTestHome(t, settings.Home); err != nil {
|
||||
return helmpath.Home("n/"), err
|
||||
}
|
||||
settings.Home = oldhome
|
||||
return helmpath.Home(dir), nil
|
||||
}
|
||||
|
||||
// ensureTestHome creates a home directory like ensureHome, but without remote references.
|
||||
//
|
||||
// t is used only for logging.
|
||||
func ensureTestHome(t *testing.T, home helmpath.Home) error {
|
||||
func ensureTestHome(t *testing.T, home helmpath.Home) {
|
||||
t.Helper()
|
||||
for _, p := range []string{
|
||||
home.String(),
|
||||
|
|
@ -117,7 +124,7 @@ func ensureTestHome(t *testing.T, home helmpath.Home) error {
|
|||
home.Starters(),
|
||||
} {
|
||||
if err := os.MkdirAll(p, 0755); err != nil {
|
||||
return errors.Wrapf(err, "could not create %s", p)
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -130,96 +137,30 @@ func ensureTestHome(t *testing.T, home helmpath.Home) error {
|
|||
Cache: "charts-index.yaml",
|
||||
})
|
||||
if err := rf.WriteFile(repoFile, 0644); err != nil {
|
||||
return err
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if r, err := repo.LoadRepositoriesFile(repoFile); err == repo.ErrRepoOutOfDate {
|
||||
t.Log("Updating repository file format...")
|
||||
if err := r.WriteFile(repoFile, 0644); err != nil {
|
||||
return err
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
t.Logf("$HELM_HOME has been configured at %s.\n", home)
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func TestRootCmd(t *testing.T) {
|
||||
cleanup := resetEnv()
|
||||
defer cleanup()
|
||||
|
||||
tests := []struct {
|
||||
name, args, home string
|
||||
envars map[string]string
|
||||
}{
|
||||
{
|
||||
name: "defaults",
|
||||
args: "home",
|
||||
home: filepath.Join(os.Getenv("HOME"), "/.helm"),
|
||||
},
|
||||
{
|
||||
name: "with --home set",
|
||||
args: "--home /foo",
|
||||
home: "/foo",
|
||||
},
|
||||
{
|
||||
name: "subcommands with --home set",
|
||||
args: "home --home /foo",
|
||||
home: "/foo",
|
||||
},
|
||||
{
|
||||
name: "with $HELM_HOME set",
|
||||
args: "home",
|
||||
envars: map[string]string{"HELM_HOME": "/bar"},
|
||||
home: "/bar",
|
||||
},
|
||||
{
|
||||
name: "subcommands with $HELM_HOME set",
|
||||
args: "home",
|
||||
envars: map[string]string{"HELM_HOME": "/bar"},
|
||||
home: "/bar",
|
||||
},
|
||||
{
|
||||
name: "with $HELM_HOME and --home set",
|
||||
args: "home --home /foo",
|
||||
envars: map[string]string{"HELM_HOME": "/bar"},
|
||||
home: "/foo",
|
||||
},
|
||||
}
|
||||
|
||||
// ensure not set locally
|
||||
os.Unsetenv("HELM_HOME")
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
defer os.Unsetenv("HELM_HOME")
|
||||
|
||||
for k, v := range tt.envars {
|
||||
os.Setenv(k, v)
|
||||
}
|
||||
|
||||
cmd, _, err := executeCommandC(nil, tt.args)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
|
||||
if settings.Home.String() != tt.home {
|
||||
t.Errorf("expected home %q, got %q", tt.home, settings.Home)
|
||||
}
|
||||
homeFlag := cmd.Flag("home").Value.String()
|
||||
homeFlag = os.ExpandEnv(homeFlag)
|
||||
if homeFlag != tt.home {
|
||||
t.Errorf("expected home %q, got %q", tt.home, homeFlag)
|
||||
}
|
||||
})
|
||||
}
|
||||
// testHelmHome sets up a Helm Home in a temp dir.
|
||||
func testHelmHome(t *testing.T) helmpath.Home {
|
||||
t.Helper()
|
||||
dir := helmpath.Home(testTempDir(t))
|
||||
ensureTestHome(t, dir)
|
||||
return dir
|
||||
}
|
||||
|
||||
func resetEnv() func() {
|
||||
origSettings := settings
|
||||
origEnv := os.Environ()
|
||||
origSettings, origEnv := settings, os.Environ()
|
||||
return func() {
|
||||
os.Clearenv()
|
||||
settings = origSettings
|
||||
for _, pair := range origEnv {
|
||||
kv := strings.SplitN(pair, "=", 2)
|
||||
|
|
@ -227,3 +168,15 @@ func resetEnv() func() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func testChdir(t *testing.T, dir string) func() {
|
||||
t.Helper()
|
||||
old, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.Chdir(dir); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return func() { os.Chdir(old) }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ func TestHistoryCmd(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "get history for release",
|
||||
cmd: "history angry-bird",
|
||||
rels: []*rpb.Release{
|
||||
|
|
@ -67,5 +67,5 @@ func TestHistoryCmd(t *testing.T) {
|
|||
},
|
||||
golden: "output/history.json",
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ package main
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
|
|
@ -26,14 +25,9 @@ import (
|
|||
)
|
||||
|
||||
func TestEnsureHome(t *testing.T) {
|
||||
home, err := ioutil.TempDir("", "helm_home")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(home)
|
||||
hh := helmpath.Home(testTempDir(t))
|
||||
|
||||
b := bytes.NewBuffer(nil)
|
||||
hh := helmpath.Home(home)
|
||||
settings.Home = hh
|
||||
if err := ensureDirectories(hh, b); err != nil {
|
||||
t.Error(err)
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import (
|
|||
)
|
||||
|
||||
func TestInstall(t *testing.T) {
|
||||
tests := []releaseCase{
|
||||
tests := []cmdTestCase{
|
||||
// Install, base case
|
||||
{
|
||||
name: "basic install",
|
||||
|
|
@ -120,7 +120,7 @@ func TestInstall(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
||||
type nameTemplateTestCase struct {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
)
|
||||
|
||||
func TestListCmd(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "with a release",
|
||||
cmd: "list",
|
||||
rels: []*release.Release{
|
||||
|
|
@ -111,5 +111,5 @@ func TestListCmd(t *testing.T) {
|
|||
golden: "output/list-with-old-releases.txt",
|
||||
}}
|
||||
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ func TestSetVersion(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPackage(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
@ -132,32 +133,20 @@ func TestPackage(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
// Because these tests are destructive, we run them in a tempdir.
|
||||
origDir, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
tmp, err := ioutil.TempDir("", "helm-package-test-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
tmp := testTempDir(t)
|
||||
|
||||
t.Logf("Running tests in %s", tmp)
|
||||
if err := os.Chdir(tmp); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer testChdir(t, tmp)()
|
||||
|
||||
if err := os.Mkdir("toot", 0777); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ensureTestHome(t, helmpath.Home(tmp))
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.Chdir(origDir)
|
||||
os.RemoveAll(tmp)
|
||||
cleanup()
|
||||
}()
|
||||
|
||||
settings.Home = helmpath.Home(tmp)
|
||||
|
||||
|
|
@ -210,22 +199,14 @@ func TestPackage(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSetAppVersion(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
var ch *chart.Chart
|
||||
expectedAppVersion := "app-version-foo"
|
||||
tmp, _ := ioutil.TempDir("", "helm-package-app-version-")
|
||||
tmp := testTempDir(t)
|
||||
|
||||
thome, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(tmp)
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
}()
|
||||
|
||||
settings.Home = helmpath.Home(thome)
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = helmpath.Home(hh)
|
||||
|
||||
c := newPackageCmd(&bytes.Buffer{})
|
||||
flags := map[string]string{
|
||||
|
|
@ -233,8 +214,7 @@ func TestSetAppVersion(t *testing.T) {
|
|||
"app-version": expectedAppVersion,
|
||||
}
|
||||
setFlags(c, flags)
|
||||
err = c.RunE(c, []string{"testdata/testcharts/alpine"})
|
||||
if err != nil {
|
||||
if err := c.RunE(c, []string{"testdata/testcharts/alpine"}); err != nil {
|
||||
t.Errorf("unexpected error %q", err)
|
||||
}
|
||||
|
||||
|
|
@ -244,7 +224,7 @@ func TestSetAppVersion(t *testing.T) {
|
|||
} else if fi.Size() == 0 {
|
||||
t.Errorf("file %q has zero bytes.", chartPath)
|
||||
}
|
||||
ch, err = chartutil.Load(chartPath)
|
||||
ch, err := chartutil.Load(chartPath)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error loading packaged chart: %v", err)
|
||||
}
|
||||
|
|
@ -254,6 +234,8 @@ func TestSetAppVersion(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPackageValues(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
testCases := []struct {
|
||||
desc string
|
||||
args []string
|
||||
|
|
@ -288,26 +270,13 @@ func TestPackageValues(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
thome, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
}()
|
||||
|
||||
settings.Home = thome
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
for _, tc := range testCases {
|
||||
var files []string
|
||||
for _, contents := range tc.valuefilesContents {
|
||||
f, err := createValuesFile(contents)
|
||||
if err != nil {
|
||||
t.Errorf("%q unexpected error creating temporary values file: %q", tc.desc, err)
|
||||
}
|
||||
defer os.RemoveAll(filepath.Dir(f))
|
||||
f := createValuesFile(t, contents)
|
||||
files = append(files, f)
|
||||
}
|
||||
valueFiles := strings.Join(files, ",")
|
||||
|
|
@ -322,11 +291,7 @@ func TestPackageValues(t *testing.T) {
|
|||
}
|
||||
|
||||
func runAndVerifyPackageCommandValues(t *testing.T, args []string, flags map[string]string, valueFiles string, expected chartutil.Values) {
|
||||
outputDir, err := ioutil.TempDir("", "helm-package")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error creating temporary output directory: %q", err)
|
||||
}
|
||||
defer os.RemoveAll(outputDir)
|
||||
outputDir := testTempDir(t)
|
||||
|
||||
if len(flags) == 0 {
|
||||
flags = make(map[string]string)
|
||||
|
|
@ -339,16 +304,14 @@ func runAndVerifyPackageCommandValues(t *testing.T, args []string, flags map[str
|
|||
|
||||
cmd := newPackageCmd(&bytes.Buffer{})
|
||||
setFlags(cmd, flags)
|
||||
err = cmd.RunE(cmd, args)
|
||||
if err != nil {
|
||||
if err := cmd.RunE(cmd, args); err != nil {
|
||||
t.Errorf("unexpected error: %q", err)
|
||||
}
|
||||
|
||||
outputFile := filepath.Join(outputDir, "alpine-0.1.0.tgz")
|
||||
verifyOutputChartExists(t, outputFile)
|
||||
|
||||
var actual chartutil.Values
|
||||
actual, err = getChartValues(outputFile)
|
||||
actual, err := getChartValues(outputFile)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error extracting chart values: %q", err)
|
||||
}
|
||||
|
|
@ -356,19 +319,15 @@ func runAndVerifyPackageCommandValues(t *testing.T, args []string, flags map[str
|
|||
verifyValues(t, actual, expected)
|
||||
}
|
||||
|
||||
func createValuesFile(data string) (string, error) {
|
||||
outputDir, err := ioutil.TempDir("", "values-file")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
func createValuesFile(t *testing.T, data string) string {
|
||||
outputDir := testTempDir(t)
|
||||
|
||||
outputFile := filepath.Join(outputDir, "values.yaml")
|
||||
if err = ioutil.WriteFile(outputFile, []byte(data), 0755); err != nil {
|
||||
os.RemoveAll(outputFile)
|
||||
return "", err
|
||||
if err := ioutil.WriteFile(outputFile, []byte(data), 0755); err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
return outputFile, nil
|
||||
return outputFile
|
||||
}
|
||||
|
||||
func getChartValues(chartPath string) (chartutil.Values, error) {
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ func TestManuallyProcessArgs(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestLoadPlugins(t *testing.T) {
|
||||
cleanup := resetEnv()
|
||||
defer cleanup()
|
||||
defer resetEnv()()
|
||||
|
||||
settings.Home = "testdata/helmhome"
|
||||
|
||||
|
|
@ -133,8 +132,7 @@ func TestLoadPlugins(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestLoadPlugins_HelmNoPlugins(t *testing.T) {
|
||||
cleanup := resetEnv()
|
||||
defer cleanup()
|
||||
defer resetEnv()()
|
||||
|
||||
settings.Home = "testdata/helmhome"
|
||||
|
||||
|
|
@ -151,6 +149,7 @@ func TestLoadPlugins_HelmNoPlugins(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSetupEnv(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
name := "pequod"
|
||||
settings.Home = helmpath.Home("testdata/helmhome")
|
||||
base := filepath.Join(settings.Home.Plugins(), name)
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import (
|
|||
)
|
||||
|
||||
func TestReleaseTesting(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "basic test",
|
||||
cmd: "test example-release",
|
||||
testRunStatus: map[string]release.TestRunStatus{"PASSED: green lights everywhere": release.TestRunSuccess},
|
||||
|
|
@ -62,5 +62,5 @@ func TestReleaseTesting(t *testing.T) {
|
|||
"PASSED: feel free to party again": release.TestRunSuccess},
|
||||
wantError: true,
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,50 +26,43 @@ import (
|
|||
)
|
||||
|
||||
func TestRepoAddCmd(t *testing.T) {
|
||||
srv, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
defer resetEnv()()
|
||||
|
||||
srv, hh, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
srv.Stop()
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
os.RemoveAll(hh.String())
|
||||
}()
|
||||
if err := ensureTestHome(t, thome); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ensureTestHome(t, hh)
|
||||
settings.Home = hh
|
||||
|
||||
settings.Home = thome
|
||||
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "add a repository",
|
||||
cmd: fmt.Sprintf("repo add test-name %s --home %s", srv.URL(), thome),
|
||||
cmd: fmt.Sprintf("repo add test-name %s --home %s", srv.URL(), hh),
|
||||
golden: "output/repo-add.txt",
|
||||
}}
|
||||
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
||||
func TestRepoAdd(t *testing.T) {
|
||||
ts, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
defer resetEnv()()
|
||||
|
||||
ts, hh, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
cleanup := resetEnv()
|
||||
hh := thome
|
||||
defer func() {
|
||||
ts.Stop()
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
os.RemoveAll(hh.String())
|
||||
}()
|
||||
if err := ensureTestHome(t, hh); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
settings.Home = thome
|
||||
ensureTestHome(t, hh)
|
||||
settings.Home = hh
|
||||
|
||||
const testRepoName = "test-name"
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ package main
|
|||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
|
@ -29,11 +28,7 @@ import (
|
|||
|
||||
func TestRepoIndexCmd(t *testing.T) {
|
||||
|
||||
dir, err := ioutil.TempDir("", "helm-")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.RemoveAll(dir)
|
||||
dir := testTempDir(t)
|
||||
|
||||
comp := filepath.Join(dir, "compressedchart-0.1.0.tgz")
|
||||
if err := linkOrCopy("testdata/testcharts/compressedchart-0.1.0.tgz", comp); err != nil {
|
||||
|
|
|
|||
|
|
@ -22,29 +22,24 @@ import (
|
|||
"strings"
|
||||
"testing"
|
||||
|
||||
"k8s.io/helm/pkg/helm/helmpath"
|
||||
"k8s.io/helm/pkg/repo"
|
||||
"k8s.io/helm/pkg/repo/repotest"
|
||||
)
|
||||
|
||||
func TestRepoRemove(t *testing.T) {
|
||||
ts, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
defer resetEnv()()
|
||||
|
||||
ts, hh, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
hh := helmpath.Home(thome)
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
ts.Stop()
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
os.RemoveAll(hh.String())
|
||||
}()
|
||||
if err := ensureTestHome(t, hh); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
settings.Home = thome
|
||||
ensureTestHome(t, hh)
|
||||
settings.Home = hh
|
||||
|
||||
const testRepoName = "test-name"
|
||||
|
||||
|
|
|
|||
|
|
@ -30,18 +30,10 @@ import (
|
|||
)
|
||||
|
||||
func TestUpdateCmd(t *testing.T) {
|
||||
thome, err := tempHelmHome(t)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer resetEnv()()
|
||||
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
}()
|
||||
|
||||
settings.Home = thome
|
||||
hh := testHelmHome(t)
|
||||
settings.Home = hh
|
||||
|
||||
out := bytes.NewBuffer(nil)
|
||||
// Instead of using the HTTP updater, we provide our own for this test.
|
||||
|
|
@ -53,7 +45,7 @@ func TestUpdateCmd(t *testing.T) {
|
|||
}
|
||||
o := &repoUpdateOptions{
|
||||
update: updater,
|
||||
home: helmpath.Home(thome),
|
||||
home: helmpath.Home(hh),
|
||||
}
|
||||
if err := o.run(out); err != nil {
|
||||
t.Fatal(err)
|
||||
|
|
@ -65,23 +57,19 @@ func TestUpdateCmd(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateCharts(t *testing.T) {
|
||||
ts, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
defer resetEnv()()
|
||||
|
||||
ts, hh, err := repotest.NewTempServer("testdata/testserver/*.*")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
hh := helmpath.Home(thome)
|
||||
cleanup := resetEnv()
|
||||
defer func() {
|
||||
ts.Stop()
|
||||
os.RemoveAll(thome.String())
|
||||
cleanup()
|
||||
os.RemoveAll(hh.String())
|
||||
}()
|
||||
if err := ensureTestHome(t, hh); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
settings.Home = thome
|
||||
ensureTestHome(t, hh)
|
||||
settings.Home = hh
|
||||
|
||||
r, err := repo.NewChartRepository(&repo.Entry{
|
||||
Name: "charts",
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import (
|
|||
)
|
||||
|
||||
func TestRollbackCmd(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "rollback a release",
|
||||
cmd: "rollback funny-honey 1",
|
||||
golden: "output/rollback.txt",
|
||||
|
|
@ -39,5 +39,5 @@ func TestRollbackCmd(t *testing.T) {
|
|||
golden: "output/rollback-no-args.txt",
|
||||
wantError: true,
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
102
cmd/helm/root.go
Normal file
102
cmd/helm/root.go
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||
|
||||
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 main // import "k8s.io/helm/cmd/helm"
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"k8s.io/helm/pkg/helm"
|
||||
)
|
||||
|
||||
var globalUsage = `The Kubernetes package manager
|
||||
|
||||
To begin working with Helm, run the 'helm init' command:
|
||||
|
||||
$ helm init
|
||||
|
||||
This will set up any necessary local configuration.
|
||||
|
||||
Common actions from this point include:
|
||||
|
||||
- helm search: search for charts
|
||||
- helm fetch: download a chart to your local directory to view
|
||||
- helm install: upload the chart to Kubernetes
|
||||
- helm list: list releases of charts
|
||||
|
||||
Environment:
|
||||
$HELM_HOME set an alternative location for Helm files. By default, these are stored in ~/.helm
|
||||
$HELM_NO_PLUGINS disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins.
|
||||
$KUBECONFIG set an alternative Kubernetes configuration file (default "~/.kube/config")
|
||||
`
|
||||
|
||||
func newRootCmd(c helm.Interface, out io.Writer, args []string) *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "helm",
|
||||
Short: "The Helm package manager for Kubernetes.",
|
||||
Long: globalUsage,
|
||||
SilenceUsage: true,
|
||||
}
|
||||
flags := cmd.PersistentFlags()
|
||||
|
||||
settings.AddFlags(flags)
|
||||
|
||||
cmd.AddCommand(
|
||||
// chart commands
|
||||
newCreateCmd(out),
|
||||
newDependencyCmd(out),
|
||||
newFetchCmd(out),
|
||||
newInspectCmd(out),
|
||||
newLintCmd(out),
|
||||
newPackageCmd(out),
|
||||
newRepoCmd(out),
|
||||
newSearchCmd(out),
|
||||
newVerifyCmd(out),
|
||||
|
||||
// release commands
|
||||
newDeleteCmd(c, out),
|
||||
newGetCmd(c, out),
|
||||
newHistoryCmd(c, out),
|
||||
newInstallCmd(c, out),
|
||||
newListCmd(c, out),
|
||||
newReleaseTestCmd(c, out),
|
||||
newRollbackCmd(c, out),
|
||||
newStatusCmd(c, out),
|
||||
newUpgradeCmd(c, out),
|
||||
|
||||
newCompletionCmd(out),
|
||||
newHomeCmd(out),
|
||||
newInitCmd(out),
|
||||
newPluginCmd(out),
|
||||
newTemplateCmd(out),
|
||||
newVersionCmd(out),
|
||||
|
||||
// Hidden documentation generator command: 'helm docs'
|
||||
newDocsCmd(out),
|
||||
)
|
||||
|
||||
flags.Parse(args)
|
||||
|
||||
// set defaults from environment
|
||||
settings.Init(flags)
|
||||
|
||||
// Find and add plugins
|
||||
loadPlugins(cmd, out)
|
||||
|
||||
return cmd
|
||||
}
|
||||
93
cmd/helm/root_test.go
Normal file
93
cmd/helm/root_test.go
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
Copyright 2016 The Kubernetes Authors All rights reserved.
|
||||
|
||||
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 main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRootCmd(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
tests := []struct {
|
||||
name, args, home string
|
||||
envars map[string]string
|
||||
}{
|
||||
{
|
||||
name: "defaults",
|
||||
args: "home",
|
||||
home: filepath.Join(os.Getenv("HOME"), "/.helm"),
|
||||
},
|
||||
{
|
||||
name: "with --home set",
|
||||
args: "--home /foo",
|
||||
home: "/foo",
|
||||
},
|
||||
{
|
||||
name: "subcommands with --home set",
|
||||
args: "home --home /foo",
|
||||
home: "/foo",
|
||||
},
|
||||
{
|
||||
name: "with $HELM_HOME set",
|
||||
args: "home",
|
||||
envars: map[string]string{"HELM_HOME": "/bar"},
|
||||
home: "/bar",
|
||||
},
|
||||
{
|
||||
name: "subcommands with $HELM_HOME set",
|
||||
args: "home",
|
||||
envars: map[string]string{"HELM_HOME": "/bar"},
|
||||
home: "/bar",
|
||||
},
|
||||
{
|
||||
name: "with $HELM_HOME and --home set",
|
||||
args: "home --home /foo",
|
||||
envars: map[string]string{"HELM_HOME": "/bar"},
|
||||
home: "/foo",
|
||||
},
|
||||
}
|
||||
|
||||
// ensure not set locally
|
||||
os.Unsetenv("HELM_HOME")
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
defer os.Unsetenv("HELM_HOME")
|
||||
|
||||
for k, v := range tt.envars {
|
||||
os.Setenv(k, v)
|
||||
}
|
||||
|
||||
cmd, _, err := executeCommandC(nil, tt.args)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %s", err)
|
||||
}
|
||||
|
||||
if settings.Home.String() != tt.home {
|
||||
t.Errorf("expected home %q, got %q", tt.home, settings.Home)
|
||||
}
|
||||
homeFlag := cmd.Flag("home").Value.String()
|
||||
homeFlag = os.ExpandEnv(homeFlag)
|
||||
if homeFlag != tt.home {
|
||||
t.Errorf("expected home %q, got %q", tt.home, homeFlag)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -21,51 +21,52 @@ import (
|
|||
)
|
||||
|
||||
func TestSearchCmd(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
defer resetEnv()()
|
||||
|
||||
setHome := func(cmd string) string {
|
||||
return cmd + " --home=testdata/helmhome"
|
||||
}
|
||||
|
||||
tests := []cmdTestCase{{
|
||||
name: "search for 'maria', expect one match",
|
||||
cmd: "search maria",
|
||||
cmd: setHome("search maria"),
|
||||
golden: "output/search-single.txt",
|
||||
}, {
|
||||
name: "search for 'alpine', expect two matches",
|
||||
cmd: "search alpine",
|
||||
cmd: setHome("search alpine"),
|
||||
golden: "output/search-multiple.txt",
|
||||
}, {
|
||||
name: "search for 'alpine' with versions, expect three matches",
|
||||
cmd: "search alpine --versions",
|
||||
cmd: setHome("search alpine --versions"),
|
||||
golden: "output/search-multiple-versions.txt",
|
||||
}, {
|
||||
name: "search for 'alpine' with version constraint, expect one match with version 0.1.0",
|
||||
cmd: "search alpine --version '>= 0.1, < 0.2'",
|
||||
cmd: setHome("search alpine --version '>= 0.1, < 0.2'"),
|
||||
golden: "output/search-constraint.txt",
|
||||
}, {
|
||||
name: "search for 'alpine' with version constraint, expect one match with version 0.1.0",
|
||||
cmd: "search alpine --versions --version '>= 0.1, < 0.2'",
|
||||
cmd: setHome("search alpine --versions --version '>= 0.1, < 0.2'"),
|
||||
golden: "output/search-versions-constraint.txt",
|
||||
}, {
|
||||
name: "search for 'alpine' with version constraint, expect one match with version 0.2.0",
|
||||
cmd: "search alpine --version '>= 0.1'",
|
||||
cmd: setHome("search alpine --version '>= 0.1'"),
|
||||
golden: "output/search-constraint-single.txt",
|
||||
}, {
|
||||
name: "search for 'alpine' with version constraint and --versions, expect two matches",
|
||||
cmd: "search alpine --versions --version '>= 0.1'",
|
||||
cmd: setHome("search alpine --versions --version '>= 0.1'"),
|
||||
golden: "output/search-multiple-versions-constraints.txt",
|
||||
}, {
|
||||
name: "search for 'syzygy', expect no matches",
|
||||
cmd: "search syzygy",
|
||||
cmd: setHome("search syzygy"),
|
||||
golden: "output/search-not-found.txt",
|
||||
}, {
|
||||
name: "search for 'alp[a-z]+', expect two matches",
|
||||
cmd: "search alp[a-z]+ --regexp",
|
||||
cmd: setHome("search alp[a-z]+ --regexp"),
|
||||
golden: "output/search-regex.txt",
|
||||
}, {
|
||||
name: "search for 'alp[', expect failure to compile regexp",
|
||||
cmd: "search alp[ --regexp",
|
||||
cmd: setHome("search alp[ --regexp"),
|
||||
wantError: true,
|
||||
}}
|
||||
|
||||
cleanup := resetEnv()
|
||||
defer cleanup()
|
||||
|
||||
settings.Home = "testdata/helmhome"
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ func TestStatusCmd(t *testing.T) {
|
|||
}}
|
||||
}
|
||||
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "get status of a deployed release",
|
||||
cmd: "status flummoxed-chickadee",
|
||||
golden: "output/status.txt",
|
||||
|
|
@ -89,5 +89,5 @@ func TestStatusCmd(t *testing.T) {
|
|||
},
|
||||
}),
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 1
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "crazy-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 1
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "zany-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 4
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "funny-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 5
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "funny-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 3
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "funny-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
44
cmd/helm/testdata/output/upgrade-with-wait.txt
vendored
44
cmd/helm/testdata/output/upgrade-with-wait.txt
vendored
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 2
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "crazy-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
44
cmd/helm/testdata/output/upgrade.txt
vendored
44
cmd/helm/testdata/output/upgrade.txt
vendored
|
|
@ -1,47 +1,3 @@
|
|||
REVISION: 2
|
||||
RELEASED: Fri Sep 2 22:04:05 1977
|
||||
CHART: testUpgradeChart-0.1.0
|
||||
USER-SUPPLIED VALUES:
|
||||
name: "value"
|
||||
COMPUTED VALUES:
|
||||
affinity: {}
|
||||
fullnameOverride: ""
|
||||
image:
|
||||
pullPolicy: IfNotPresent
|
||||
repository: nginx
|
||||
tag: stable
|
||||
ingress:
|
||||
annotations: {}
|
||||
enabled: false
|
||||
hosts:
|
||||
- chart-example.local
|
||||
path: /
|
||||
tls: []
|
||||
name: value
|
||||
nameOverride: ""
|
||||
nodeSelector: {}
|
||||
replicaCount: 1
|
||||
resources: {}
|
||||
service:
|
||||
port: 80
|
||||
type: ClusterIP
|
||||
tolerations: []
|
||||
|
||||
HOOKS:
|
||||
---
|
||||
# pre-install-hook
|
||||
apiVersion: v1
|
||||
kind: Job
|
||||
metadata:
|
||||
annotations:
|
||||
"helm.sh/hook": pre-install
|
||||
|
||||
MANIFEST:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: fixture
|
||||
|
||||
Release "funny-bunny" has been upgraded. Happy Helming!
|
||||
LAST DEPLOYED: 1977-09-02 22:04:05 +0000 UTC
|
||||
NAMESPACE: default
|
||||
|
|
|
|||
|
|
@ -17,9 +17,6 @@ limitations under the License.
|
|||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"k8s.io/helm/pkg/chartutil"
|
||||
|
|
@ -29,8 +26,7 @@ import (
|
|||
)
|
||||
|
||||
func TestUpgradeCmd(t *testing.T) {
|
||||
tmpChart, _ := ioutil.TempDir("testdata", "tmp")
|
||||
defer os.RemoveAll(tmpChart)
|
||||
tmpChart := testTempDir(t)
|
||||
cfile := &chart.Metadata{
|
||||
Name: "testUpgradeChart",
|
||||
Description: "A Helm chart for Kubernetes",
|
||||
|
|
@ -38,9 +34,12 @@ func TestUpgradeCmd(t *testing.T) {
|
|||
}
|
||||
chartPath, err := chartutil.Create(cfile, tmpChart)
|
||||
if err != nil {
|
||||
t.Errorf("Error creating chart for upgrade: %v", err)
|
||||
t.Fatalf("Error creating chart for upgrade: %v", err)
|
||||
}
|
||||
ch, err := chartutil.Load(chartPath)
|
||||
if err != nil {
|
||||
t.Fatalf("Error loading chart: %v", err)
|
||||
}
|
||||
ch, _ := chartutil.Load(chartPath)
|
||||
_ = helm.ReleaseMock(&helm.MockReleaseOptions{
|
||||
Name: "funny-bunny",
|
||||
Chart: ch,
|
||||
|
|
@ -55,11 +54,11 @@ func TestUpgradeCmd(t *testing.T) {
|
|||
|
||||
chartPath, err = chartutil.Create(cfile, tmpChart)
|
||||
if err != nil {
|
||||
t.Errorf("Error creating chart: %v", err)
|
||||
t.Fatalf("Error creating chart: %v", err)
|
||||
}
|
||||
ch, err = chartutil.Load(chartPath)
|
||||
if err != nil {
|
||||
t.Errorf("Error loading updated chart: %v", err)
|
||||
t.Fatalf("Error loading updated chart: %v", err)
|
||||
}
|
||||
|
||||
// update chart version again
|
||||
|
|
@ -71,22 +70,22 @@ func TestUpgradeCmd(t *testing.T) {
|
|||
|
||||
chartPath, err = chartutil.Create(cfile, tmpChart)
|
||||
if err != nil {
|
||||
t.Errorf("Error creating chart: %v", err)
|
||||
t.Fatalf("Error creating chart: %v", err)
|
||||
}
|
||||
var ch2 *chart.Chart
|
||||
ch2, err = chartutil.Load(chartPath)
|
||||
if err != nil {
|
||||
t.Errorf("Error loading updated chart: %v", err)
|
||||
t.Fatalf("Error loading updated chart: %v", err)
|
||||
}
|
||||
|
||||
missingDepsPath := filepath.Join("testdata/testcharts/chart-missing-deps")
|
||||
badDepsPath := filepath.Join("testdata/testcharts/chart-bad-requirements")
|
||||
missingDepsPath := "testdata/testcharts/chart-missing-deps"
|
||||
badDepsPath := "testdata/testcharts/chart-bad-requirements"
|
||||
|
||||
relMock := func(n string, v int, ch *chart.Chart) *release.Release {
|
||||
return helm.ReleaseMock(&helm.MockReleaseOptions{Name: n, Version: v, Chart: ch})
|
||||
}
|
||||
|
||||
tests := []releaseCase{
|
||||
tests := []cmdTestCase{
|
||||
{
|
||||
name: "upgrade a release",
|
||||
cmd: "upgrade funny-bunny " + chartPath,
|
||||
|
|
@ -142,5 +141,5 @@ func TestUpgradeCmd(t *testing.T) {
|
|||
wantError: true,
|
||||
},
|
||||
}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import (
|
|||
)
|
||||
|
||||
func TestVersion(t *testing.T) {
|
||||
tests := []releaseCase{{
|
||||
tests := []cmdTestCase{{
|
||||
name: "default",
|
||||
cmd: "version",
|
||||
golden: "output/version.txt",
|
||||
|
|
@ -29,5 +29,5 @@ func TestVersion(t *testing.T) {
|
|||
cmd: "version --template='Version: {{.Version}}'",
|
||||
golden: "output/version-template.txt",
|
||||
}}
|
||||
testReleaseCmd(t, tests)
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ func AssertGoldenBytes(t TestingT, actual []byte, filename string) {
|
|||
t.Helper()
|
||||
|
||||
if err := compare(actual, path(filename)); err != nil {
|
||||
t.Fatalf("%+v", err)
|
||||
t.Fatalf("%v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ func AssertGoldenString(t TestingT, actual, filename string) {
|
|||
t.Helper()
|
||||
|
||||
if err := compare([]byte(actual), path(filename)); err != nil {
|
||||
t.Fatalf("%+v", err)
|
||||
t.Fatalf("%v", err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -71,11 +71,10 @@ func TestEnvSettings(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
cleanup := resetEnv()
|
||||
defer cleanup()
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
defer resetEnv()()
|
||||
|
||||
for k, v := range tt.envars {
|
||||
os.Setenv(k, v)
|
||||
}
|
||||
|
|
@ -103,8 +102,6 @@ func TestEnvSettings(t *testing.T) {
|
|||
if settings.KubeContext != tt.kcontext {
|
||||
t.Errorf("expected kube-context %q, got %q", tt.kcontext, settings.KubeContext)
|
||||
}
|
||||
|
||||
cleanup()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue