github.com/appscode/helm@v3.0.0-alpha.1+incompatible/cmd/helm/upgrade_test.go (about) 1 /* 2 Copyright The Helm Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package main 18 19 import ( 20 "fmt" 21 "path/filepath" 22 "testing" 23 24 "helm.sh/helm/pkg/chart" 25 "helm.sh/helm/pkg/chart/loader" 26 "helm.sh/helm/pkg/chartutil" 27 "helm.sh/helm/pkg/release" 28 ) 29 30 func TestUpgradeCmd(t *testing.T) { 31 tmpChart := testTempDir(t) 32 cfile := &chart.Chart{ 33 Metadata: &chart.Metadata{ 34 APIVersion: chart.APIVersionV1, 35 Name: "testUpgradeChart", 36 Description: "A Helm chart for Kubernetes", 37 Version: "0.1.0", 38 }, 39 } 40 chartPath := filepath.Join(tmpChart, cfile.Metadata.Name) 41 if err := chartutil.SaveDir(cfile, tmpChart); err != nil { 42 t.Fatalf("Error creating chart for upgrade: %v", err) 43 } 44 ch, err := loader.Load(chartPath) 45 if err != nil { 46 t.Fatalf("Error loading chart: %v", err) 47 } 48 _ = release.Mock(&release.MockReleaseOptions{ 49 Name: "funny-bunny", 50 Chart: ch, 51 }) 52 53 // update chart version 54 cfile.Metadata.Version = "0.1.2" 55 56 if err := chartutil.SaveDir(cfile, tmpChart); err != nil { 57 t.Fatalf("Error creating chart: %v", err) 58 } 59 ch, err = loader.Load(chartPath) 60 if err != nil { 61 t.Fatalf("Error loading updated chart: %v", err) 62 } 63 64 // update chart version again 65 cfile.Metadata.Version = "0.1.3" 66 67 if err := chartutil.SaveDir(cfile, tmpChart); err != nil { 68 t.Fatalf("Error creating chart: %v", err) 69 } 70 var ch2 *chart.Chart 71 ch2, err = loader.Load(chartPath) 72 if err != nil { 73 t.Fatalf("Error loading updated chart: %v", err) 74 } 75 76 missingDepsPath := "testdata/testcharts/chart-missing-deps" 77 badDepsPath := "testdata/testcharts/chart-bad-requirements" 78 79 relMock := func(n string, v int, ch *chart.Chart) *release.Release { 80 return release.Mock(&release.MockReleaseOptions{Name: n, Version: v, Chart: ch}) 81 } 82 83 tests := []cmdTestCase{ 84 { 85 name: "upgrade a release", 86 cmd: fmt.Sprintf("upgrade funny-bunny '%s'", chartPath), 87 golden: "output/upgrade.txt", 88 rels: []*release.Release{relMock("funny-bunny", 2, ch)}, 89 }, 90 { 91 name: "upgrade a release with timeout", 92 cmd: fmt.Sprintf("upgrade funny-bunny --timeout 120s '%s'", chartPath), 93 golden: "output/upgrade-with-timeout.txt", 94 rels: []*release.Release{relMock("funny-bunny", 3, ch2)}, 95 }, 96 { 97 name: "upgrade a release with --reset-values", 98 cmd: fmt.Sprintf("upgrade funny-bunny --reset-values '%s'", chartPath), 99 golden: "output/upgrade-with-reset-values.txt", 100 rels: []*release.Release{relMock("funny-bunny", 4, ch2)}, 101 }, 102 { 103 name: "upgrade a release with --reuse-values", 104 cmd: fmt.Sprintf("upgrade funny-bunny --reuse-values '%s'", chartPath), 105 golden: "output/upgrade-with-reset-values2.txt", 106 rels: []*release.Release{relMock("funny-bunny", 5, ch2)}, 107 }, 108 { 109 name: "install a release with 'upgrade --install'", 110 cmd: fmt.Sprintf("upgrade zany-bunny -i '%s'", chartPath), 111 golden: "output/upgrade-with-install.txt", 112 rels: []*release.Release{relMock("zany-bunny", 1, ch)}, 113 }, 114 { 115 name: "install a release with 'upgrade --install' and timeout", 116 cmd: fmt.Sprintf("upgrade crazy-bunny -i --timeout 120s '%s'", chartPath), 117 golden: "output/upgrade-with-install-timeout.txt", 118 rels: []*release.Release{relMock("crazy-bunny", 1, ch)}, 119 }, 120 { 121 name: "upgrade a release with wait", 122 cmd: fmt.Sprintf("upgrade crazy-bunny --wait '%s'", chartPath), 123 golden: "output/upgrade-with-wait.txt", 124 rels: []*release.Release{relMock("crazy-bunny", 2, ch2)}, 125 }, 126 { 127 name: "upgrade a release with missing dependencies", 128 cmd: fmt.Sprintf("upgrade bonkers-bunny%s", missingDepsPath), 129 golden: "output/upgrade-with-missing-dependencies.txt", 130 wantError: true, 131 }, 132 { 133 name: "upgrade a release with bad dependencies", 134 cmd: fmt.Sprintf("upgrade bonkers-bunny '%s'", badDepsPath), 135 golden: "output/upgrade-with-bad-dependencies.txt", 136 wantError: true, 137 }, 138 } 139 runTestCmd(t, tests) 140 }