1
16
17 package driver
18
19 import (
20 "reflect"
21 "testing"
22
23 rspb "helm.sh/helm/v3/pkg/release"
24 )
25
26 func TestRecordsAdd(t *testing.T) {
27 rs := records([]*record{
28 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
29 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
30 })
31
32 var tests = []struct {
33 desc string
34 key string
35 ok bool
36 rec *record
37 }{
38 {
39 "add valid key",
40 "rls-a.v3",
41 false,
42 newRecord("rls-a.v3", releaseStub("rls-a", 3, "default", rspb.StatusSuperseded)),
43 },
44 {
45 "add already existing key",
46 "rls-a.v1",
47 true,
48 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusDeployed)),
49 },
50 }
51
52 for _, tt := range tests {
53 if err := rs.Add(tt.rec); err != nil {
54 if !tt.ok {
55 t.Fatalf("failed: %q: %s\n", tt.desc, err)
56 }
57 }
58 }
59 }
60
61 func TestRecordsRemove(t *testing.T) {
62 var tests = []struct {
63 desc string
64 key string
65 ok bool
66 }{
67 {"remove valid key", "rls-a.v1", false},
68 {"remove invalid key", "rls-a.v", true},
69 {"remove non-existent key", "rls-z.v1", true},
70 }
71
72 rs := records([]*record{
73 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
74 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
75 })
76
77 startLen := rs.Len()
78
79 for _, tt := range tests {
80 if r := rs.Remove(tt.key); r == nil {
81 if !tt.ok {
82 t.Fatalf("Failed to %q (key = %s). Expected nil, got %v",
83 tt.desc,
84 tt.key,
85 r,
86 )
87 }
88 }
89 }
90
91
92
93 endLen := rs.Len()
94 if endLen >= startLen {
95 t.Errorf("expected ending length %d to be less than starting length %d", endLen, startLen)
96 }
97 }
98
99 func TestRecordsRemoveAt(t *testing.T) {
100 rs := records([]*record{
101 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
102 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
103 })
104
105 if len(rs) != 2 {
106 t.Fatal("Expected len=2 for mock")
107 }
108
109 rs.Remove("rls-a.v1")
110 if len(rs) != 1 {
111 t.Fatalf("Expected length of rs to be 1, got %d", len(rs))
112 }
113 }
114
115 func TestRecordsGet(t *testing.T) {
116 rs := records([]*record{
117 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
118 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
119 })
120
121 var tests = []struct {
122 desc string
123 key string
124 rec *record
125 }{
126 {
127 "get valid key",
128 "rls-a.v1",
129 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
130 },
131 {
132 "get invalid key",
133 "rls-a.v3",
134 nil,
135 },
136 }
137
138 for _, tt := range tests {
139 got := rs.Get(tt.key)
140 if !reflect.DeepEqual(tt.rec, got) {
141 t.Fatalf("Expected %v, got %v", tt.rec, got)
142 }
143 }
144 }
145
146 func TestRecordsIndex(t *testing.T) {
147 rs := records([]*record{
148 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
149 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
150 })
151
152 var tests = []struct {
153 desc string
154 key string
155 sort int
156 }{
157 {
158 "get valid key",
159 "rls-a.v1",
160 0,
161 },
162 {
163 "get invalid key",
164 "rls-a.v3",
165 -1,
166 },
167 }
168
169 for _, tt := range tests {
170 got, _ := rs.Index(tt.key)
171 if got != tt.sort {
172 t.Fatalf("Expected %d, got %d", tt.sort, got)
173 }
174 }
175 }
176
177 func TestRecordsExists(t *testing.T) {
178 rs := records([]*record{
179 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
180 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
181 })
182
183 var tests = []struct {
184 desc string
185 key string
186 ok bool
187 }{
188 {
189 "get valid key",
190 "rls-a.v1",
191 true,
192 },
193 {
194 "get invalid key",
195 "rls-a.v3",
196 false,
197 },
198 }
199
200 for _, tt := range tests {
201 got := rs.Exists(tt.key)
202 if got != tt.ok {
203 t.Fatalf("Expected %t, got %t", tt.ok, got)
204 }
205 }
206 }
207
208 func TestRecordsReplace(t *testing.T) {
209 rs := records([]*record{
210 newRecord("rls-a.v1", releaseStub("rls-a", 1, "default", rspb.StatusSuperseded)),
211 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
212 })
213
214 var tests = []struct {
215 desc string
216 key string
217 rec *record
218 expected *record
219 }{
220 {
221 "replace with existing key",
222 "rls-a.v2",
223 newRecord("rls-a.v3", releaseStub("rls-a", 3, "default", rspb.StatusSuperseded)),
224 newRecord("rls-a.v2", releaseStub("rls-a", 2, "default", rspb.StatusDeployed)),
225 },
226 {
227 "replace with non existing key",
228 "rls-a.v4",
229 newRecord("rls-a.v4", releaseStub("rls-a", 4, "default", rspb.StatusDeployed)),
230 nil,
231 },
232 }
233
234 for _, tt := range tests {
235 got := rs.Replace(tt.key, tt.rec)
236 if !reflect.DeepEqual(tt.expected, got) {
237 t.Fatalf("Expected %v, got %v", tt.expected, got)
238 }
239 }
240 }
241
View as plain text