From 0b4223b3dd8a60067411f17a624c0cd896719a1d Mon Sep 17 00:00:00 2001 From: Daniel Hu Date: Thu, 14 Apr 2022 11:07:46 +0800 Subject: [PATCH] fix: make state.ToList stable Signed-off-by: Daniel Hu --- internal/pkg/statemanager/manager_test.go | 14 +++++++++++++- internal/pkg/statemanager/state.go | 8 ++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/internal/pkg/statemanager/manager_test.go b/internal/pkg/statemanager/manager_test.go index 20e59174e..ea1ff4985 100644 --- a/internal/pkg/statemanager/manager_test.go +++ b/internal/pkg/statemanager/manager_test.go @@ -44,6 +44,8 @@ var _ = Describe("Statemanager", func() { }) It("Should get the state list", func() { + // Adding order: A,C,B + // List order should be: A,B,C key := statemanager.StateKey("a_githubactions") stateA := statemanager.State{ Name: "a", @@ -54,6 +56,16 @@ var _ = Describe("Statemanager", func() { err = smgr.AddState(key, stateA) Expect(err).NotTo(HaveOccurred()) + key = statemanager.StateKey("c_githubactions") + stateC := statemanager.State{ + Name: "c", + Plugin: "githubactions", + Options: map[string]interface{}{"c": "value"}, + Resource: map[string]interface{}{"c": "value"}, + } + err = smgr.AddState(key, stateC) + Expect(err).NotTo(HaveOccurred()) + key = statemanager.StateKey("b_githubactions") stateB := statemanager.State{ Name: "b", @@ -65,7 +77,7 @@ var _ = Describe("Statemanager", func() { Expect(err).NotTo(HaveOccurred()) stateList := smgr.GetStatesMap().ToList() - Expect(stateList).To(Equal([]statemanager.State{stateA, stateB})) + Expect(stateList).To(Equal([]statemanager.State{stateA, stateB, stateC})) }) AfterEach(func() { diff --git a/internal/pkg/statemanager/state.go b/internal/pkg/statemanager/state.go index f87030df7..e70a6b32a 100644 --- a/internal/pkg/statemanager/state.go +++ b/internal/pkg/statemanager/state.go @@ -3,6 +3,7 @@ package statemanager import ( "bytes" "fmt" + "sort" "gopkg.in/yaml.v3" @@ -45,6 +46,13 @@ func (s StatesMap) ToList() []State { res = append(res, value.(State)) return true }) + + sort.Slice(res, func(i, j int) bool { + keyi := fmt.Sprintf("%s.%s", res[i].Name, res[i].Plugin) + keyj := fmt.Sprintf("%s.%s", res[j].Name, res[j].Plugin) + return keyi < keyj + }) + return res }