mirror of
https://github.com/helm/helm.git
synced 2026-05-28 04:35:48 -04:00
fix: increase helm list test coverage
Signed-off-by: Terry Howe <terrylhowe@gmail.com>
This commit is contained in:
parent
7dd2484aed
commit
379b0899b3
4 changed files with 380 additions and 0 deletions
|
|
@ -245,3 +245,373 @@ func TestListOutputCompletion(t *testing.T) {
|
|||
func TestListFileCompletion(t *testing.T) {
|
||||
checkFileCompletion(t, "list", false)
|
||||
}
|
||||
|
||||
func TestListOutputFormats(t *testing.T) {
|
||||
defaultNamespace := "default"
|
||||
timestamp := time.Unix(1452902400, 0).UTC()
|
||||
chartInfo := &chart.Chart{
|
||||
Metadata: &chart.Metadata{
|
||||
Name: "test-chart",
|
||||
Version: "1.0.0",
|
||||
AppVersion: "0.0.1",
|
||||
},
|
||||
}
|
||||
|
||||
releaseFixture := []*release.Release{
|
||||
{
|
||||
Name: "test-release",
|
||||
Version: 1,
|
||||
Namespace: defaultNamespace,
|
||||
Info: &release.Info{
|
||||
LastDeployed: timestamp,
|
||||
Status: common.StatusDeployed,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
}
|
||||
|
||||
tests := []cmdTestCase{{
|
||||
name: "list releases in json format",
|
||||
cmd: "list --output json",
|
||||
golden: "output/list-json.txt",
|
||||
rels: releaseFixture,
|
||||
}, {
|
||||
name: "list releases in yaml format",
|
||||
cmd: "list --output yaml",
|
||||
golden: "output/list-yaml.txt",
|
||||
rels: releaseFixture,
|
||||
}}
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
||||
func TestReleaseListWriter(t *testing.T) {
|
||||
timestamp := time.Unix(1452902400, 0).UTC()
|
||||
chartInfo := &chart.Chart{
|
||||
Metadata: &chart.Metadata{
|
||||
Name: "test-chart",
|
||||
Version: "1.0.0",
|
||||
AppVersion: "0.0.1",
|
||||
},
|
||||
}
|
||||
|
||||
releases := []*release.Release{
|
||||
{
|
||||
Name: "test-release",
|
||||
Version: 1,
|
||||
Namespace: "default",
|
||||
Info: &release.Info{
|
||||
LastDeployed: timestamp,
|
||||
Status: common.StatusDeployed,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
releases []*release.Release
|
||||
timeFormat string
|
||||
noHeaders bool
|
||||
noColor bool
|
||||
}{
|
||||
{
|
||||
name: "empty releases list",
|
||||
releases: []*release.Release{},
|
||||
timeFormat: "",
|
||||
noHeaders: false,
|
||||
noColor: false,
|
||||
},
|
||||
{
|
||||
name: "custom time format",
|
||||
releases: releases,
|
||||
timeFormat: "2006-01-02",
|
||||
noHeaders: false,
|
||||
noColor: false,
|
||||
},
|
||||
{
|
||||
name: "no headers",
|
||||
releases: releases,
|
||||
timeFormat: "",
|
||||
noHeaders: true,
|
||||
noColor: false,
|
||||
},
|
||||
{
|
||||
name: "no color",
|
||||
releases: releases,
|
||||
timeFormat: "",
|
||||
noHeaders: false,
|
||||
noColor: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
writer := newReleaseListWriter(tt.releases, tt.timeFormat, tt.noHeaders, tt.noColor)
|
||||
|
||||
if writer == nil {
|
||||
t.Error("Expected writer to be non-nil")
|
||||
} else {
|
||||
if len(writer.releases) != len(tt.releases) {
|
||||
t.Errorf("Expected %d releases, got %d", len(tt.releases), len(writer.releases))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestReleaseListWriterMethods(t *testing.T) {
|
||||
timestamp := time.Unix(1452902400, 0).UTC()
|
||||
zeroTimestamp := time.Time{}
|
||||
chartInfo := &chart.Chart{
|
||||
Metadata: &chart.Metadata{
|
||||
Name: "test-chart",
|
||||
Version: "1.0.0",
|
||||
AppVersion: "0.0.1",
|
||||
},
|
||||
}
|
||||
|
||||
releases := []*release.Release{
|
||||
{
|
||||
Name: "test-release",
|
||||
Version: 1,
|
||||
Namespace: "default",
|
||||
Info: &release.Info{
|
||||
LastDeployed: timestamp,
|
||||
Status: common.StatusDeployed,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
{
|
||||
Name: "zero-time-release",
|
||||
Version: 1,
|
||||
Namespace: "default",
|
||||
Info: &release.Info{
|
||||
LastDeployed: zeroTimestamp,
|
||||
Status: common.StatusFailed,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
status common.Status
|
||||
}{
|
||||
{"deployed", common.StatusDeployed},
|
||||
{"failed", common.StatusFailed},
|
||||
{"pending-install", common.StatusPendingInstall},
|
||||
{"pending-upgrade", common.StatusPendingUpgrade},
|
||||
{"pending-rollback", common.StatusPendingRollback},
|
||||
{"uninstalling", common.StatusUninstalling},
|
||||
{"uninstalled", common.StatusUninstalled},
|
||||
{"superseded", common.StatusSuperseded},
|
||||
{"unknown", common.StatusUnknown},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
testReleases := []*release.Release{
|
||||
{
|
||||
Name: "test-release",
|
||||
Version: 1,
|
||||
Namespace: "default",
|
||||
Info: &release.Info{
|
||||
LastDeployed: timestamp,
|
||||
Status: tt.status,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
}
|
||||
|
||||
writer := newReleaseListWriter(testReleases, "", false, false)
|
||||
|
||||
var buf []byte
|
||||
out := &bytesWriter{buf: &buf}
|
||||
|
||||
err := writer.WriteJSON(out)
|
||||
if err != nil {
|
||||
t.Errorf("WriteJSON failed: %v", err)
|
||||
}
|
||||
|
||||
err = writer.WriteYAML(out)
|
||||
if err != nil {
|
||||
t.Errorf("WriteYAML failed: %v", err)
|
||||
}
|
||||
|
||||
err = writer.WriteTable(out)
|
||||
if err != nil {
|
||||
t.Errorf("WriteTable failed: %v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
writer := newReleaseListWriter(releases, "", false, false)
|
||||
|
||||
var buf []byte
|
||||
out := &bytesWriter{buf: &buf}
|
||||
|
||||
err := writer.WriteJSON(out)
|
||||
if err != nil {
|
||||
t.Errorf("WriteJSON failed: %v", err)
|
||||
}
|
||||
|
||||
err = writer.WriteYAML(out)
|
||||
if err != nil {
|
||||
t.Errorf("WriteYAML failed: %v", err)
|
||||
}
|
||||
|
||||
err = writer.WriteTable(out)
|
||||
if err != nil {
|
||||
t.Errorf("WriteTable failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterReleases(t *testing.T) {
|
||||
releases := []*release.Release{
|
||||
{Name: "release1"},
|
||||
{Name: "release2"},
|
||||
{Name: "release3"},
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
releases []*release.Release
|
||||
ignoredReleaseNames []string
|
||||
expectedCount int
|
||||
}{
|
||||
{
|
||||
name: "nil ignored list",
|
||||
releases: releases,
|
||||
ignoredReleaseNames: nil,
|
||||
expectedCount: 3,
|
||||
},
|
||||
{
|
||||
name: "empty ignored list",
|
||||
releases: releases,
|
||||
ignoredReleaseNames: []string{},
|
||||
expectedCount: 3,
|
||||
},
|
||||
{
|
||||
name: "filter one release",
|
||||
releases: releases,
|
||||
ignoredReleaseNames: []string{"release1"},
|
||||
expectedCount: 2,
|
||||
},
|
||||
{
|
||||
name: "filter multiple releases",
|
||||
releases: releases,
|
||||
ignoredReleaseNames: []string{"release1", "release3"},
|
||||
expectedCount: 1,
|
||||
},
|
||||
{
|
||||
name: "filter non-existent release",
|
||||
releases: releases,
|
||||
ignoredReleaseNames: []string{"non-existent"},
|
||||
expectedCount: 3,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := filterReleases(tt.releases, tt.ignoredReleaseNames)
|
||||
if len(result) != tt.expectedCount {
|
||||
t.Errorf("Expected %d releases, got %d", tt.expectedCount, len(result))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type bytesWriter struct {
|
||||
buf *[]byte
|
||||
}
|
||||
|
||||
func (b *bytesWriter) Write(p []byte) (n int, err error) {
|
||||
*b.buf = append(*b.buf, p...)
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
func TestListCustomTimeFormat(t *testing.T) {
|
||||
defaultNamespace := "default"
|
||||
timestamp := time.Unix(1452902400, 0).UTC()
|
||||
chartInfo := &chart.Chart{
|
||||
Metadata: &chart.Metadata{
|
||||
Name: "test-chart",
|
||||
Version: "1.0.0",
|
||||
AppVersion: "0.0.1",
|
||||
},
|
||||
}
|
||||
|
||||
releaseFixture := []*release.Release{
|
||||
{
|
||||
Name: "test-release",
|
||||
Version: 1,
|
||||
Namespace: defaultNamespace,
|
||||
Info: &release.Info{
|
||||
LastDeployed: timestamp,
|
||||
Status: common.StatusDeployed,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
}
|
||||
|
||||
tests := []cmdTestCase{{
|
||||
name: "list releases with custom time format",
|
||||
cmd: "list --time-format '2006-01-02 15:04:05'",
|
||||
golden: "output/list-time-format.txt",
|
||||
rels: releaseFixture,
|
||||
}}
|
||||
runTestCmd(t, tests)
|
||||
}
|
||||
|
||||
func TestListStatusMapping(t *testing.T) {
|
||||
defaultNamespace := "default"
|
||||
timestamp := time.Unix(1452902400, 0).UTC()
|
||||
chartInfo := &chart.Chart{
|
||||
Metadata: &chart.Metadata{
|
||||
Name: "test-chart",
|
||||
Version: "1.0.0",
|
||||
AppVersion: "0.0.1",
|
||||
},
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
status common.Status
|
||||
}{
|
||||
{"deployed", common.StatusDeployed},
|
||||
{"failed", common.StatusFailed},
|
||||
{"pending-install", common.StatusPendingInstall},
|
||||
{"pending-upgrade", common.StatusPendingUpgrade},
|
||||
{"pending-rollback", common.StatusPendingRollback},
|
||||
{"uninstalling", common.StatusUninstalling},
|
||||
{"uninstalled", common.StatusUninstalled},
|
||||
{"superseded", common.StatusSuperseded},
|
||||
{"unknown", common.StatusUnknown},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
releaseFixture := []*release.Release{
|
||||
{
|
||||
Name: "test-release",
|
||||
Version: 1,
|
||||
Namespace: defaultNamespace,
|
||||
Info: &release.Info{
|
||||
LastDeployed: timestamp,
|
||||
Status: tc.status,
|
||||
},
|
||||
Chart: chartInfo,
|
||||
},
|
||||
}
|
||||
|
||||
writer := newReleaseListWriter(releaseFixture, "", false, false)
|
||||
if len(writer.releases) != 1 {
|
||||
t.Errorf("Expected 1 release, got %d", len(writer.releases))
|
||||
}
|
||||
|
||||
if writer.releases[0].Status != tc.status.String() {
|
||||
t.Errorf("Expected status %s, got %s", tc.status.String(), writer.releases[0].Status)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1
pkg/cmd/testdata/output/list-json.txt
vendored
Normal file
1
pkg/cmd/testdata/output/list-json.txt
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
[{"name":"test-release","namespace":"default","revision":"1","updated":"2016-01-16 00:00:00 +0000 UTC","status":"deployed","chart":"test-chart-1.0.0","app_version":"0.0.1"}]
|
||||
2
pkg/cmd/testdata/output/list-time-format.txt
vendored
Normal file
2
pkg/cmd/testdata/output/list-time-format.txt
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
|
||||
test-release default 1 2016-01-16 00:00:00 deployed test-chart-1.0.0 0.0.1
|
||||
7
pkg/cmd/testdata/output/list-yaml.txt
vendored
Normal file
7
pkg/cmd/testdata/output/list-yaml.txt
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
- app_version: 0.0.1
|
||||
chart: test-chart-1.0.0
|
||||
name: test-release
|
||||
namespace: default
|
||||
revision: "1"
|
||||
status: deployed
|
||||
updated: 2016-01-16 00:00:00 +0000 UTC
|
||||
Loading…
Reference in a new issue