master
go 383 lines 7.64 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package collectorapi
4
5 import (
6 "fmt"
7 "testing"
8
9 "github.com/stretchr/testify/assert"
10 "github.com/stretchr/testify/require"
11 )
12
13 func createTestChart(id string) *Chart {
14 return &Chart{
15 ID: id,
16 Title: "Title",
17 Units: "units",
18 Fam: "family",
19 Ctx: "context",
20 Type: Line,
21 Dims: Dims{
22 {ID: "dim1", Algo: Absolute},
23 },
24 Vars: Vars{
25 {ID: "var1", Value: 1},
26 },
27 }
28 }
29
30 func TestDimAlgo_String(t *testing.T) {
31 cases := []struct {
32 expected string
33 actual fmt.Stringer
34 }{
35 {"absolute", Absolute},
36 {"incremental", Incremental},
37 {"percentage-of-absolute-row", PercentOfAbsolute},
38 {"percentage-of-incremental-row", PercentOfIncremental},
39 {"absolute", DimAlgo("wrong")},
40 }
41
42 for _, v := range cases {
43 assert.Equal(t, v.expected, v.actual.String())
44 }
45 }
46
47 func TestChartType_String(t *testing.T) {
48 cases := []struct {
49 expected string
50 actual fmt.Stringer
51 }{
52 {"line", Line},
53 {"area", Area},
54 {"stacked", Stacked},
55 {"line", ChartType("wrong")},
56 }
57
58 for _, v := range cases {
59 assert.Equal(t, v.expected, v.actual.String())
60 }
61 }
62
63 func TestOpts_String(t *testing.T) {
64 cases := []struct {
65 expected string
66 actual fmt.Stringer
67 }{
68 {"", Opts{}},
69 {
70 "detail hidden obsolete store_first",
71 Opts{Detail: true, Hidden: true, Obsolete: true, StoreFirst: true},
72 },
73 {
74 "detail hidden obsolete store_first",
75 Opts{Detail: true, Hidden: true, Obsolete: true, StoreFirst: true},
76 },
77 }
78
79 for _, v := range cases {
80 assert.Equal(t, v.expected, v.actual.String())
81 }
82 }
83
84 func TestDimOpts_String(t *testing.T) {
85 cases := []struct {
86 expected string
87 actual fmt.Stringer
88 }{
89 {"", DimOpts{}},
90 {
91 "hidden nooverflow noreset obsolete type=float",
92 DimOpts{Hidden: true, NoOverflow: true, NoReset: true, Obsolete: true, Float: true},
93 },
94 {
95 "hidden obsolete",
96 DimOpts{Hidden: true, NoOverflow: false, NoReset: false, Obsolete: true},
97 },
98 }
99
100 for _, v := range cases {
101 assert.Equal(t, v.expected, v.actual.String())
102 }
103 }
104
105 func TestCharts_Copy(t *testing.T) {
106 orig := &Charts{
107 createTestChart("1"),
108 createTestChart("2"),
109 }
110 copied := orig.Copy()
111
112 require.False(t, orig == copied, "Charts copy points to the same address")
113 require.Len(t, *orig, len(*copied))
114
115 for idx := range *orig {
116 compareCharts(t, (*orig)[idx], (*copied)[idx])
117 }
118 }
119
120 func TestChart_Copy(t *testing.T) {
121 orig := createTestChart("1")
122
123 compareCharts(t, orig, orig.Copy())
124 }
125
126 func TestCharts_Add(t *testing.T) {
127 charts := Charts{}
128 chart1 := createTestChart("1")
129 chart2 := createTestChart("2")
130 chart3 := createTestChart("")
131
132 // OK case
133 assert.NoError(t, charts.Add(
134 chart1,
135 chart2,
136 ))
137 assert.Len(t, charts, 2)
138
139 // NG case
140 assert.Error(t, charts.Add(
141 chart3,
142 chart1,
143 chart2,
144 ))
145 assert.Len(t, charts, 2)
146
147 assert.True(t, charts[0] == chart1)
148 assert.True(t, charts[1] == chart2)
149 }
150
151 func TestCharts_Add_SameID(t *testing.T) {
152 charts := Charts{}
153 chart1 := createTestChart("1")
154 chart2 := createTestChart("1")
155
156 assert.NoError(t, charts.Add(chart1))
157 assert.Error(t, charts.Add(chart2))
158 assert.Len(t, charts, 1)
159
160 charts = Charts{}
161 chart1 = createTestChart("1")
162 chart2 = createTestChart("1")
163
164 assert.NoError(t, charts.Add(chart1))
165 chart1.MarkRemove()
166 assert.NoError(t, charts.Add(chart2))
167 assert.Len(t, charts, 2)
168 }
169
170 func TestCharts_Get(t *testing.T) {
171 chart := createTestChart("1")
172 charts := Charts{
173 chart,
174 }
175
176 // OK case
177 assert.True(t, chart == charts.Get("1"))
178 // NG case
179 assert.Nil(t, charts.Get("2"))
180 }
181
182 func TestCharts_Has(t *testing.T) {
183 chart := createTestChart("1")
184 charts := &Charts{
185 chart,
186 }
187
188 // OK case
189 assert.True(t, charts.Has("1"))
190 // NG case
191 assert.False(t, charts.Has("2"))
192 }
193
194 func TestCharts_Remove(t *testing.T) {
195 chart := createTestChart("1")
196 charts := &Charts{
197 chart,
198 }
199
200 // OK case
201 assert.NoError(t, charts.Remove("1"))
202 assert.Len(t, *charts, 0)
203
204 // NG case
205 assert.Error(t, charts.Remove("2"))
206 }
207
208 func TestChart_AddDim(t *testing.T) {
209 chart := createTestChart("1")
210 dim := &Dim{ID: "dim2"}
211
212 // OK case
213 assert.NoError(t, chart.AddDim(dim))
214 assert.Len(t, chart.Dims, 2)
215
216 // NG case
217 assert.Error(t, chart.AddDim(dim))
218 assert.Len(t, chart.Dims, 2)
219 }
220
221 func TestChart_AddVar(t *testing.T) {
222 chart := createTestChart("1")
223 variable := &Var{ID: "var2"}
224
225 // OK case
226 assert.NoError(t, chart.AddVar(variable))
227 assert.Len(t, chart.Vars, 2)
228
229 // NG case
230 assert.Error(t, chart.AddVar(variable))
231 assert.Len(t, chart.Vars, 2)
232 }
233
234 func TestChart_GetDim(t *testing.T) {
235 chart := &Chart{
236 Dims: Dims{
237 {ID: "1"},
238 {ID: "2"},
239 },
240 }
241
242 // OK case
243 assert.True(t, chart.GetDim("1") != nil && chart.GetDim("1").ID == "1")
244
245 // NG case
246 assert.Nil(t, chart.GetDim("3"))
247 }
248
249 func TestChart_RemoveDim(t *testing.T) {
250 chart := createTestChart("1")
251
252 // OK case
253 assert.NoError(t, chart.RemoveDim("dim1"))
254 assert.Len(t, chart.Dims, 0)
255
256 // NG case
257 assert.Error(t, chart.RemoveDim("dim2"))
258 }
259
260 func TestChart_HasDim(t *testing.T) {
261 chart := createTestChart("1")
262
263 // OK case
264 assert.True(t, chart.HasDim("dim1"))
265 // NG case
266 assert.False(t, chart.HasDim("dim2"))
267 }
268
269 func TestChart_MarkNotCreated(t *testing.T) {
270 chart := createTestChart("1")
271
272 chart.MarkNotCreated()
273 assert.False(t, chart.created)
274 }
275
276 func TestChart_MarkRemove(t *testing.T) {
277 chart := createTestChart("1")
278
279 chart.MarkRemove()
280 assert.True(t, chart.remove)
281 assert.True(t, chart.Obsolete)
282 }
283
284 func TestChart_MarkDimRemove(t *testing.T) {
285 chart := createTestChart("1")
286
287 assert.Error(t, chart.MarkDimRemove("dim99", false))
288 assert.NoError(t, chart.MarkDimRemove("dim1", true))
289 assert.True(t, chart.GetDim("dim1").Obsolete)
290 assert.True(t, chart.GetDim("dim1").Hidden)
291 assert.True(t, chart.GetDim("dim1").remove)
292 }
293
294 func TestChart_check(t *testing.T) {
295 // OK case
296 chart := createTestChart("1")
297 assert.NoError(t, checkChart(chart))
298
299 // NG case
300 chart = createTestChart("1")
301 chart.ID = ""
302 assert.Error(t, checkChart(chart))
303
304 chart = createTestChart("1")
305 chart.ID = "invalid id"
306 assert.Error(t, checkChart(chart))
307
308 chart = createTestChart("1")
309 chart.Title = ""
310 assert.Error(t, checkChart(chart))
311
312 chart = createTestChart("1")
313 chart.Units = ""
314 assert.Error(t, checkChart(chart))
315
316 chart = createTestChart("1")
317 chart.Dims = Dims{
318 {ID: "1"},
319 {ID: "1"},
320 }
321 assert.Error(t, checkChart(chart))
322
323 chart = createTestChart("1")
324 chart.Vars = Vars{
325 {ID: "1"},
326 {ID: "1"},
327 }
328 assert.Error(t, checkChart(chart))
329 }
330
331 func TestDim_check(t *testing.T) {
332 // OK case
333 dim := &Dim{ID: "id"}
334 assert.NoError(t, checkDim(dim))
335
336 // NG case
337 dim = &Dim{ID: "id"}
338 dim.ID = ""
339 assert.Error(t, checkDim(dim))
340
341 dim = &Dim{ID: "id"}
342 dim.ID = "invalid id"
343 assert.Error(t, checkDim(dim))
344
345 dim = &Dim{ID: "i d", Name: "id"}
346 assert.NoError(t, checkDim(dim))
347 }
348
349 func TestVar_check(t *testing.T) {
350 // OK case
351 v := &Var{ID: "id"}
352 assert.NoError(t, checkVar(v))
353
354 // NG case
355 v = &Var{ID: "id"}
356 v.ID = ""
357 assert.Error(t, checkVar(v))
358
359 v = &Var{ID: "id"}
360 v.ID = "invalid id"
361 assert.Error(t, checkVar(v))
362 }
363
364 func compareCharts(t *testing.T, orig, copied *Chart) {
365 // 1. compare chart pointers
366 // 2. compare Dims, Vars length
367 // 3. compare Dims, Vars pointers
368
369 assert.False(t, orig == copied, "Chart copy ChartsFunc points to the same address")
370
371 require.Len(t, orig.Dims, len(copied.Dims))
372 require.Len(t, orig.Vars, len(copied.Vars))
373
374 for idx := range (*orig).Dims {
375 assert.False(t, orig.Dims[idx] == copied.Dims[idx], "Chart copy dim points to the same address")
376 assert.Equal(t, orig.Dims[idx], copied.Dims[idx], "Chart copy dim isn't equal to orig")
377 }
378
379 for idx := range (*orig).Vars {
380 assert.False(t, orig.Vars[idx] == copied.Vars[idx], "Chart copy var points to the same address")
381 assert.Equal(t, orig.Vars[idx], copied.Vars[idx], "Chart copy var isn't equal to orig")
382 }
383 }