From f0d204ae567754e3a4e294b4c2ab68ca1196a73f Mon Sep 17 00:00:00 2001 From: Jonathan Innis Date: Mon, 4 Oct 2021 20:53:50 -0700 Subject: [PATCH] Fix deepcopy calls --- pkg/graph/graph.go | 38 +++++++---- pkg/graph/graph_test.go | 135 ++++++++++++++++++++++++++-------------- 2 files changed, 113 insertions(+), 60 deletions(-) diff --git a/pkg/graph/graph.go b/pkg/graph/graph.go index d8d44d07..890cea32 100644 --- a/pkg/graph/graph.go +++ b/pkg/graph/graph.go @@ -21,12 +21,19 @@ type Graph struct { func (g *Graph) DeepCopy() *Graph { newGraph := &Graph{ - Name: g.Name, - Nodes: make(map[string]*AppNode), - AllExecutors: g.AllExecutors, + Name: g.Name, + } + if g.Nodes != nil { + newGraph.Nodes = make(map[string]*AppNode) + for name, appNode := range g.Nodes { + newGraph.Nodes[name] = appNode.DeepCopy() + } } - for name, appNode := range g.Nodes { - newGraph.Nodes[name] = appNode.DeepCopy() + if g.AllExecutors != nil { + newGraph.AllExecutors = make(map[string]executorpkg.Executor) + for name, executor := range g.AllExecutors { + newGraph.AllExecutors[name] = executor + } } return newGraph } @@ -40,7 +47,7 @@ type AppNode struct { func NewAppNode(application *v1alpha1.Application) *AppNode { return &AppNode{ Name: application.Name, - Dependencies: application.Dependencies, + Dependencies: append([]string{}, application.Dependencies...), Tasks: make(map[string]*TaskNode), } } @@ -48,7 +55,7 @@ func NewAppNode(application *v1alpha1.Application) *AppNode { func (appNode *AppNode) DeepCopy() *AppNode { newAppNode := &AppNode{ Name: appNode.Name, - Dependencies: appNode.Dependencies, + Dependencies: append([]string{}, appNode.Dependencies...), } if appNode.Tasks != nil { newAppNode.Tasks = make(map[string]*TaskNode) @@ -75,6 +82,7 @@ func NewTaskNode(application *v1alpha1.Application) *TaskNode { ChartName: application.Spec.Chart.Name, ChartVersion: application.Spec.Chart.Version, Release: application.Spec.Release, + Dependencies: []string{}, Executors: make(map[string]*ExecutorNode), } } @@ -86,7 +94,7 @@ func (taskNode *TaskNode) DeepCopy() *TaskNode { ChartVersion: taskNode.ChartVersion, Parent: taskNode.Parent, Release: taskNode.Release.DeepCopy(), - Dependencies: taskNode.Dependencies, + Dependencies: append([]string{}, taskNode.Dependencies...), } if taskNode.Executors != nil { newTaskNode.Executors = make(map[string]*ExecutorNode) @@ -107,7 +115,7 @@ type ExecutorNode struct { func NewExecutorNode(executor *v1alpha1.Executor) *ExecutorNode { return &ExecutorNode{ Name: executor.Name, - Dependencies: executor.Dependencies, + Dependencies: append([]string{}, executor.Dependencies...), Executor: executorpkg.ForwardFactory(executor.Type), Params: executor.Params, } @@ -115,15 +123,18 @@ func NewExecutorNode(executor *v1alpha1.Executor) *ExecutorNode { func NewDefaultExecutorNode() *ExecutorNode { return &ExecutorNode{ - Name: string(v1alpha1.HelmReleaseExecutor), - Executor: executorpkg.ForwardFactory(v1alpha1.HelmReleaseExecutor), + Name: string(v1alpha1.HelmReleaseExecutor), + Executor: executorpkg.ForwardFactory(v1alpha1.HelmReleaseExecutor), + Dependencies: []string{}, } } func (executorNode *ExecutorNode) DeepCopy() *ExecutorNode { return &ExecutorNode{ - Name: executorNode.Name, - Executor: executorNode.Executor, + Name: executorNode.Name, + Executor: executorNode.Executor, + Dependencies: append([]string{}, executorNode.Dependencies...), + Params: executorNode.Params.DeepCopy(), } } @@ -165,6 +176,7 @@ func NewForwardGraph(appGroup *v1alpha1.ApplicationGroup) *Graph { ChartVersion: subChartVersion, Release: release, Parent: application.Name, + Dependencies: []string{}, Executors: make(map[string]*ExecutorNode), } for _, dep := range subChart.Dependencies { diff --git a/pkg/graph/graph_test.go b/pkg/graph/graph_test.go index d070f87f..97d1c43b 100644 --- a/pkg/graph/graph_test.go +++ b/pkg/graph/graph_test.go @@ -80,7 +80,8 @@ func Test_NewForwardGraph(t *testing.T) { }, Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1-application1": { Name: "application1-application1", @@ -91,10 +92,12 @@ func Test_NewForwardGraph(t *testing.T) { Raw: []byte(`{}`), }, }, + Dependencies: []string{}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -113,10 +116,12 @@ func Test_NewForwardGraph(t *testing.T) { Raw: []byte(`{}`), }, }, + Dependencies: []string{}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -135,10 +140,12 @@ func Test_NewForwardGraph(t *testing.T) { Raw: []byte(`{}`), }, }, + Dependencies: []string{}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -247,7 +254,8 @@ func Test_NewForwardGraph(t *testing.T) { }, Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1-application1": { Name: "application1-application1", @@ -261,8 +269,9 @@ func Test_NewForwardGraph(t *testing.T) { Dependencies: []string{"application1-subchart1", "application1-subchart2", "application1-subchart3"}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -279,8 +288,9 @@ func Test_NewForwardGraph(t *testing.T) { Dependencies: []string{"application1-subchart2"}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -293,11 +303,13 @@ func Test_NewForwardGraph(t *testing.T) { Raw: []byte(`{}`), }, }, - Parent: "application1", + Parent: "application1", + Dependencies: []string{}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -314,8 +326,9 @@ func Test_NewForwardGraph(t *testing.T) { Dependencies: []string{"application1-subchart1", "application1-subchart2"}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -337,8 +350,9 @@ func Test_NewForwardGraph(t *testing.T) { Dependencies: []string{"application2-subchart1"}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -351,11 +365,13 @@ func Test_NewForwardGraph(t *testing.T) { Raw: []byte(`{}`), }, }, - Parent: "application2", + Parent: "application2", + Dependencies: []string{}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -374,10 +390,12 @@ func Test_NewForwardGraph(t *testing.T) { Raw: []byte(`{}`), }, }, + Dependencies: []string{}, Executors: map[string]*ExecutorNode{ "helmrelease": { - Name: "helmrelease", - Executor: executor.HelmReleaseForward{}, + Name: "helmrelease", + Executor: executor.HelmReleaseForward{}, + Dependencies: []string{}, }, }, }, @@ -827,10 +845,12 @@ func Test_Diff(t *testing.T) { Name: "firstGraph", Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, }, }, }, @@ -879,10 +899,12 @@ func Test_Diff(t *testing.T) { Name: "firstGraph", Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, }, }, }, @@ -937,21 +959,26 @@ func Test_Diff(t *testing.T) { Name: "firstGraph", Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, }, }, }, "application2": { - Name: "application2", + Name: "application2", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "subtask1": { - Name: "subtask1", + Name: "subtask1", + Dependencies: []string{}, }, "subtask2": { - Name: "subtask2", + Name: "subtask2", + Dependencies: []string{}, }, }, }, @@ -1013,18 +1040,22 @@ func Test_Combine(t *testing.T) { Name: "firstGraph", Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, }, }, }, "application2": { - Name: "application2", + Name: "application2", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application2": { - Name: "application2", + Name: "application2", + Dependencies: []string{}, }, }, }, @@ -1085,38 +1116,48 @@ func Test_Combine(t *testing.T) { Name: "firstGraph", Nodes: map[string]*AppNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application1": { - Name: "application1", + Name: "application1", + Dependencies: []string{}, }, }, }, "application2": { - Name: "application2", + Name: "application2", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application2": { - Name: "application2", + Name: "application2", + Dependencies: []string{}, }, "subtask1": { - Name: "subtask1", + Name: "subtask1", + Dependencies: []string{}, }, "subtask2": { - Name: "subtask2", + Name: "subtask2", + Dependencies: []string{}, }, }, }, "application3": { - Name: "application3", + Name: "application3", + Dependencies: []string{}, Tasks: map[string]*TaskNode{ "application3": { - Name: "application3", + Name: "application3", + Dependencies: []string{}, }, "subtask1": { - Name: "subtask1", + Name: "subtask1", + Dependencies: []string{}, }, "subtask2": { - Name: "subtask2", + Name: "subtask2", + Dependencies: []string{}, }, }, },