argo-cd/cmd/argocd/commands/tree_test.go
github-actions[bot] 4d9835927d
Bump major version to 3 (#21410)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: crenshaw-dev <350466+crenshaw-dev@users.noreply.github.com>
2025-01-10 16:14:00 -05:00

210 lines
9 KiB
Go

package commands
import (
"bytes"
"testing"
"text/tabwriter"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
)
func TestTreeViewAppGet(t *testing.T) {
var parent v1alpha1.ResourceNode
parent.ResourceRef = v1alpha1.ResourceRef{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}
objs := make(map[string]v1alpha1.ResourceNode)
objs["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = parent
var child v1alpha1.ResourceNode
child.ResourceRef = v1alpha1.ResourceRef{Group: "apps", Version: "v1", Kind: "ReplicaSet", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo-5dcd5457d5", UID: "75c30dce-1b66-414f-a86c-573a74be0f40"}
child.ParentRefs = []v1alpha1.ResourceRef{{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}}
objs["75c30dce-1b66-414f-a86c-573a74be0f40"] = child
childMapping := make(map[string][]string)
childMapping["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = []string{"75c30dce-1b66-414f-a86c-573a74be0f40"}
stateMap := make(map[string]*resourceState)
stateMap["Rollout/numalogic-rollout-demo"] = &resourceState{
Status: "Running",
Health: "Healthy",
Hook: "",
Message: "No Issues",
Name: "sandbox-rollout-numalogic-demo",
Kind: "Rollout",
Group: "argoproj.io",
}
buf := &bytes.Buffer{}
w := tabwriter.NewWriter(buf, 0, 0, 2, ' ', 0)
treeViewAppGet("", objs, childMapping, parent, stateMap, w)
require.NoError(t, w.Flush())
output := buf.String()
assert.Contains(t, output, "ReplicaSet")
assert.Contains(t, output, "Rollout")
assert.Contains(t, output, "numalogic-rollout")
assert.Contains(t, output, "Healthy")
assert.Contains(t, output, "No Issues")
}
func TestTreeViewDetailedAppGet(t *testing.T) {
var parent v1alpha1.ResourceNode
parent.ResourceRef = v1alpha1.ResourceRef{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}
objs := make(map[string]v1alpha1.ResourceNode)
objs["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = parent
var child v1alpha1.ResourceNode
child.ResourceRef = v1alpha1.ResourceRef{Group: "apps", Version: "v1", Kind: "ReplicaSet", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo-5dcd5457d5", UID: "75c30dce-1b66-414f-a86c-573a74be0f40"}
child.ParentRefs = []v1alpha1.ResourceRef{{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}}
child.Health = &v1alpha1.HealthStatus{Status: "Degraded", Message: "Readiness Gate failed"}
objs["75c30dce-1b66-414f-a86c-573a74be0f40"] = child
childMapping := make(map[string][]string)
childMapping["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = []string{"75c30dce-1b66-414f-a86c-573a74be0f40"}
stateMap := make(map[string]*resourceState)
stateMap["Rollout/numalogic-rollout-demo"] = &resourceState{
Status: "Running",
Health: "Healthy",
Hook: "",
Message: "No Issues",
Name: "sandbox-rollout-numalogic-demo",
Kind: "Rollout",
Group: "argoproj.io",
}
buf := &bytes.Buffer{}
w := tabwriter.NewWriter(buf, 0, 0, 2, ' ', 0)
detailedTreeViewAppGet("", objs, childMapping, parent, stateMap, w)
require.NoError(t, w.Flush())
output := buf.String()
assert.Contains(t, output, "ReplicaSet")
assert.Contains(t, output, "Rollout")
assert.Contains(t, output, "numalogic-rollout")
assert.Contains(t, output, "Healthy")
assert.Contains(t, output, "No Issues")
assert.Contains(t, output, "Degraded")
assert.Contains(t, output, "Readiness Gate failed")
}
func TestTreeViewAppResources(t *testing.T) {
var parent v1alpha1.ResourceNode
parent.ResourceRef = v1alpha1.ResourceRef{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}
objs := make(map[string]v1alpha1.ResourceNode)
objs["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = parent
var child v1alpha1.ResourceNode
child.ResourceRef = v1alpha1.ResourceRef{Group: "apps", Version: "v1", Kind: "ReplicaSet", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo-5dcd5457d5", UID: "75c30dce-1b66-414f-a86c-573a74be0f40"}
child.ParentRefs = []v1alpha1.ResourceRef{{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}}
objs["75c30dce-1b66-414f-a86c-573a74be0f40"] = child
childMapping := make(map[string][]string)
childMapping["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = []string{"75c30dce-1b66-414f-a86c-573a74be0f40"}
buf := &bytes.Buffer{}
w := tabwriter.NewWriter(buf, 0, 0, 2, ' ', 0)
treeViewAppResourcesNotOrphaned("", objs, childMapping, parent, w)
var orphan v1alpha1.ResourceNode
orphan.ResourceRef = v1alpha1.ResourceRef{Group: "apps", Version: "v1", Kind: "ReplicaSet", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo-5dcdnk457d5", UID: "75c30dce-1b66-41hf-a86c-573a74be0f40"}
objsOrphan := make(map[string]v1alpha1.ResourceNode)
objsOrphan["75c30dce-1b66-41hf-a86c-573a74be0f40"] = orphan
orphanchildMapping := make(map[string][]string)
orphanParent := orphan
treeViewAppResourcesOrphaned("", objsOrphan, orphanchildMapping, orphanParent, w)
require.NoError(t, w.Flush())
output := buf.String()
assert.Contains(t, output, "ReplicaSet")
assert.Contains(t, output, "Rollout")
assert.Contains(t, output, "numalogic-rollout")
assert.Contains(t, output, "argoproj.io")
assert.Contains(t, output, "No")
assert.Contains(t, output, "Yes")
assert.Contains(t, output, "numalogic-rollout-demo-5dcdnk457d5")
}
func TestTreeViewDetailedAppResources(t *testing.T) {
var parent v1alpha1.ResourceNode
parent.ResourceRef = v1alpha1.ResourceRef{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}
objs := make(map[string]v1alpha1.ResourceNode)
objs["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = parent
var child v1alpha1.ResourceNode
child.ResourceRef = v1alpha1.ResourceRef{Group: "apps", Version: "v1", Kind: "ReplicaSet", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo-5dcd5457d5", UID: "75c30dce-1b66-414f-a86c-573a74be0f40"}
child.ParentRefs = []v1alpha1.ResourceRef{{Group: "argoproj.io", Version: "", Kind: "Rollout", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo", UID: "87f3aab0-f634-4b2c-959a-7ddd30675ed0"}}
objs["75c30dce-1b66-414f-a86c-573a74be0f40"] = child
childMapping := make(map[string][]string)
childMapping["87f3aab0-f634-4b2c-959a-7ddd30675ed0"] = []string{"75c30dce-1b66-414f-a86c-573a74be0f40"}
buf := &bytes.Buffer{}
w := tabwriter.NewWriter(buf, 0, 0, 2, ' ', 0)
detailedTreeViewAppResourcesNotOrphaned("", objs, childMapping, parent, w)
var orphan v1alpha1.ResourceNode
orphan.ResourceRef = v1alpha1.ResourceRef{Group: "apps", Version: "v1", Kind: "ReplicaSet", Namespace: "sandbox-rollout-numalogic-demo", Name: "numalogic-rollout-demo-5dcdnk457d5", UID: "75c30dce-1b66-41hf-a86c-573a74be0f40"}
orphan.Health = &v1alpha1.HealthStatus{
Status: "Degraded",
Message: "Readiness Gate failed",
}
objsOrphan := make(map[string]v1alpha1.ResourceNode)
objsOrphan["75c30dce-1b66-41hf-a86c-573a74be0f40"] = orphan
orphanchildMapping := make(map[string][]string)
orphanParent := orphan
detailedTreeViewAppResourcesOrphaned("", objsOrphan, orphanchildMapping, orphanParent, w)
require.NoError(t, w.Flush())
output := buf.String()
assert.Contains(t, output, "ReplicaSet")
assert.Contains(t, output, "Rollout")
assert.Contains(t, output, "numalogic-rollout")
assert.Contains(t, output, "argoproj.io")
assert.Contains(t, output, "No")
assert.Contains(t, output, "Yes")
assert.Contains(t, output, "numalogic-rollout-demo-5dcdnk457d5")
assert.Contains(t, output, "Degraded")
assert.Contains(t, output, "Readiness Gate failed")
}
func TestPrintPrefix(t *testing.T) {
tests := []struct {
input string
expected string
name string
}{
{
input: "",
expected: "",
name: "empty string",
},
{
input: firstElemPrefix,
expected: firstElemPrefix,
name: "only first element prefix",
},
{
input: lastElemPrefix,
expected: lastElemPrefix,
name: "only last element prefix",
},
{
input: firstElemPrefix + firstElemPrefix,
expected: pipe + firstElemPrefix,
name: "double first element prefix",
},
{
input: firstElemPrefix + lastElemPrefix,
expected: pipe + lastElemPrefix,
name: "first then last element prefix",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
got := printPrefix(test.input)
assert.Equal(t, test.expected, got)
})
}
}