Passed
Pull Request — master (#801)
by kota
06:13
created

oval.TestUpsert   B

Complexity

Conditions 4

Size

Total Lines 113
Code Lines 72

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 72
dl 0
loc 113
rs 7.9163
c 0
b 0
f 0
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
package oval
2
3
import (
4
	"reflect"
5
	"sort"
6
	"testing"
7
8
	"github.com/future-architect/vuls/config"
9
	"github.com/future-architect/vuls/models"
10
	ovalmodels "github.com/kotakanbe/goval-dictionary/models"
11
)
12
13
func TestUpsert(t *testing.T) {
14
	var tests = []struct {
15
		res      ovalResult
16
		def      ovalmodels.Definition
17
		packName string
18
		fixStat  fixStat
19
		upserted bool
20
		out      ovalResult
21
	}{
22
		//insert
23
		{
24
			res: ovalResult{},
25
			def: ovalmodels.Definition{
26
				DefinitionID: "1111",
27
			},
28
			packName: "pack1",
29
			fixStat: fixStat{
30
				notFixedYet: true,
31
				fixedIn:     "1.0.0",
32
			},
33
			upserted: false,
34
			out: ovalResult{
35
				[]defPacks{
36
					{
37
						def: ovalmodels.Definition{
38
							DefinitionID: "1111",
39
						},
40
						binpkgFixstat: map[string]fixStat{
41
							"pack1": fixStat{
42
								notFixedYet: true,
43
								fixedIn:     "1.0.0",
44
							},
45
						},
46
					},
47
				},
48
			},
49
		},
50
		//update
51
		{
52
			res: ovalResult{
53
				[]defPacks{
54
					{
55
						def: ovalmodels.Definition{
56
							DefinitionID: "1111",
57
						},
58
						binpkgFixstat: map[string]fixStat{
59
							"pack1": fixStat{
60
								notFixedYet: true,
61
								fixedIn:     "1.0.0",
62
							},
63
						},
64
					},
65
					{
66
						def: ovalmodels.Definition{
67
							DefinitionID: "2222",
68
						},
69
						binpkgFixstat: map[string]fixStat{
70
							"pack3": fixStat{
71
								notFixedYet: true,
72
								fixedIn:     "2.0.0",
73
							},
74
						},
75
					},
76
				},
77
			},
78
			def: ovalmodels.Definition{
79
				DefinitionID: "1111",
80
			},
81
			packName: "pack2",
82
			fixStat: fixStat{
83
				notFixedYet: false,
84
				fixedIn:     "3.0.0",
85
			},
86
			upserted: true,
87
			out: ovalResult{
88
				[]defPacks{
89
					{
90
						def: ovalmodels.Definition{
91
							DefinitionID: "1111",
92
						},
93
						binpkgFixstat: map[string]fixStat{
94
							"pack1": fixStat{
95
								notFixedYet: true,
96
								fixedIn:     "1.0.0",
97
							},
98
							"pack2": fixStat{
99
								notFixedYet: false,
100
								fixedIn:     "3.0.0",
101
							},
102
						},
103
					},
104
					{
105
						def: ovalmodels.Definition{
106
							DefinitionID: "2222",
107
						},
108
						binpkgFixstat: map[string]fixStat{
109
							"pack3": fixStat{
110
								notFixedYet: true,
111
								fixedIn:     "2.0.0",
112
							},
113
						},
114
					},
115
				},
116
			},
117
		},
118
	}
119
	for i, tt := range tests {
120
		upserted := tt.res.upsert(tt.def, tt.packName, tt.fixStat)
121
		if tt.upserted != upserted {
122
			t.Errorf("[%d]\nexpected: %t\n  actual: %t\n", i, tt.upserted, upserted)
123
		}
124
		if !reflect.DeepEqual(tt.out, tt.res) {
125
			t.Errorf("[%d]\nexpected: %v\n  actual: %v\n", i, tt.out, tt.res)
126
		}
127
	}
128
}
129
130
func TestDefpacksToPackStatuses(t *testing.T) {
131
	type in struct {
132
		dp    defPacks
133
		packs models.Packages
134
	}
135
	var tests = []struct {
136
		in  in
137
		out models.PackageFixStatuses
138
	}{
139
		// Ubuntu
140
		{
141
			in: in{
142
				dp: defPacks{
143
					def: ovalmodels.Definition{
144
						AffectedPacks: []ovalmodels.Package{
145
							{
146
								Name:        "a",
147
								NotFixedYet: true,
148
								Version:     "1.0.0",
149
							},
150
							{
151
								Name:        "b",
152
								NotFixedYet: false,
153
								Version:     "2.0.0",
154
							},
155
						},
156
					},
157
					binpkgFixstat: map[string]fixStat{
158
						"a": fixStat{
159
							notFixedYet: true,
160
							fixedIn:     "1.0.0",
161
							isSrcPack:   false,
162
						},
163
						"b": fixStat{
164
							notFixedYet: true,
165
							fixedIn:     "1.0.0",
166
							isSrcPack:   true,
167
							srcPackName: "lib-b",
168
						},
169
					},
170
				},
171
			},
172
			out: models.PackageFixStatuses{
173
				{
174
					BinName:     "a",
175
					NotFixedYet: true,
176
					FixedIn:     "1.0.0",
177
					IsSrcPack:   false,
178
				},
179
				{
180
					BinName:     "b",
181
					NotFixedYet: true,
182
					FixedIn:     "1.0.0",
183
					IsSrcPack:   true,
184
					SrcName:     "lib-b",
185
				},
186
			},
187
		},
188
	}
189
	for i, tt := range tests {
190
		actual := tt.in.dp.toPackStatuses()
191
		sort.Slice(actual, func(i, j int) bool {
192
			return actual[i].BinName < actual[j].BinName
193
		})
194
		if !reflect.DeepEqual(actual, tt.out) {
195
			t.Errorf("[%d]\nexpected: %v\n  actual: %v\n", i, tt.out, actual)
196
		}
197
	}
198
}
199
200
func TestIsOvalDefAffected(t *testing.T) {
201
	type in struct {
202
		def    ovalmodels.Definition
203
		req    request
204
		family string
205
		kernel models.Kernel
206
	}
207
	var tests = []struct {
208
		in          in
209
		affected    bool
210
		notFixedYet bool
211
		fixedIn     string
212
	}{
213
		// 0. Ubuntu ovalpack.NotFixedYet == true
214
		{
215
			in: in{
216
				family: "ubuntu",
217
				def: ovalmodels.Definition{
218
					AffectedPacks: []ovalmodels.Package{
219
						{
220
							Name:        "a",
221
							NotFixedYet: true,
222
						},
223
						{
224
							Name:        "b",
225
							NotFixedYet: true,
226
							Version:     "1.0.0",
227
						},
228
					},
229
				},
230
				req: request{
231
					packName: "b",
232
				},
233
			},
234
			affected:    true,
235
			notFixedYet: true,
236
			fixedIn:     "1.0.0",
237
		},
238
		// 1. Ubuntu
239
		//   ovalpack.NotFixedYet == false
240
		//   req.isSrcPack == true
241
		//   Version comparison
242
		//     oval vs installed
243
		{
244
			in: in{
245
				family: "ubuntu",
246
				def: ovalmodels.Definition{
247
					AffectedPacks: []ovalmodels.Package{
248
						{
249
							Name:        "a",
250
							NotFixedYet: false,
251
						},
252
						{
253
							Name:        "b",
254
							NotFixedYet: false,
255
							Version:     "1.0.0-1",
256
						},
257
					},
258
				},
259
				req: request{
260
					packName:       "b",
261
					isSrcPack:      true,
262
					versionRelease: "1.0.0-0",
263
				},
264
			},
265
			affected:    true,
266
			notFixedYet: false,
267
			fixedIn:     "1.0.0-1",
268
		},
269
		// 2. Ubuntu
270
		//   ovalpack.NotFixedYet == false
271
		//   Version comparison not hit
272
		//     oval vs installed
273
		{
274
			in: in{
275
				family: "ubuntu",
276
				def: ovalmodels.Definition{
277
					AffectedPacks: []ovalmodels.Package{
278
						{
279
							Name:        "a",
280
							NotFixedYet: false,
281
						},
282
						{
283
							Name:        "b",
284
							NotFixedYet: false,
285
							Version:     "1.0.0-1",
286
						},
287
					},
288
				},
289
				req: request{
290
					packName:       "b",
291
					versionRelease: "1.0.0-2",
292
				},
293
			},
294
			affected:    false,
295
			notFixedYet: false,
296
		},
297
		// 3. Ubuntu
298
		//   ovalpack.NotFixedYet == false
299
		//   req.isSrcPack == false
300
		//   Version comparison
301
		//     oval vs NewVersion
302
		//       oval.version > installed.newVersion
303
		{
304
			in: in{
305
				family: "ubuntu",
306
				def: ovalmodels.Definition{
307
					AffectedPacks: []ovalmodels.Package{
308
						{
309
							Name:        "a",
310
							NotFixedYet: false,
311
						},
312
						{
313
							Name:        "b",
314
							NotFixedYet: false,
315
							Version:     "1.0.0-3",
316
						},
317
					},
318
				},
319
				req: request{
320
					packName:          "b",
321
					isSrcPack:         false,
322
					versionRelease:    "1.0.0-0",
323
					NewVersionRelease: "1.0.0-2",
324
				},
325
			},
326
			affected:    true,
327
			notFixedYet: true,
328
			fixedIn:     "1.0.0-3",
329
		},
330
		// 4. Ubuntu
331
		//   ovalpack.NotFixedYet == false
332
		//   req.isSrcPack == false
333
		//   Version comparison
334
		//     oval vs NewVersion
335
		//       oval.version < installed.newVersion
336
		{
337
			in: in{
338
				family: "ubuntu",
339
				def: ovalmodels.Definition{
340
					AffectedPacks: []ovalmodels.Package{
341
						{
342
							Name:        "a",
343
							NotFixedYet: false,
344
						},
345
						{
346
							Name:        "b",
347
							NotFixedYet: false,
348
							Version:     "1.0.0-2",
349
						},
350
					},
351
				},
352
				req: request{
353
					packName:          "b",
354
					isSrcPack:         false,
355
					versionRelease:    "1.0.0-0",
356
					NewVersionRelease: "1.0.0-3",
357
				},
358
			},
359
			affected:    true,
360
			notFixedYet: false,
361
			fixedIn:     "1.0.0-2",
362
		},
363
		// 5 RedHat
364
		{
365
			in: in{
366
				family: "redhat",
367
				def: ovalmodels.Definition{
368
					AffectedPacks: []ovalmodels.Package{
369
						{
370
							Name:        "a",
371
							NotFixedYet: false,
372
						},
373
						{
374
							Name:        "b",
375
							NotFixedYet: false,
376
							Version:     "0:1.2.3-45.el6_7.8",
377
						},
378
					},
379
				},
380
				req: request{
381
					packName:          "b",
382
					isSrcPack:         false,
383
					versionRelease:    "0:1.2.3-45.el6_7.7",
384
					NewVersionRelease: "",
385
				},
386
			},
387
			affected:    true,
388
			notFixedYet: false,
389
			fixedIn:     "0:1.2.3-45.el6_7.8",
390
		},
391
		// 6 RedHat
392
		{
393
			in: in{
394
				family: "redhat",
395
				def: ovalmodels.Definition{
396
					AffectedPacks: []ovalmodels.Package{
397
						{
398
							Name:        "a",
399
							NotFixedYet: false,
400
						},
401
						{
402
							Name:        "b",
403
							NotFixedYet: false,
404
							Version:     "0:1.2.3-45.el6_7.8",
405
						},
406
					},
407
				},
408
				req: request{
409
					packName:          "b",
410
					isSrcPack:         false,
411
					versionRelease:    "0:1.2.3-45.el6_7.6",
412
					NewVersionRelease: "0:1.2.3-45.el6_7.7",
413
				},
414
			},
415
			affected:    true,
416
			notFixedYet: true,
417
			fixedIn:     "0:1.2.3-45.el6_7.8",
418
		},
419
		// 7 RedHat
420
		{
421
			in: in{
422
				family: "redhat",
423
				def: ovalmodels.Definition{
424
					AffectedPacks: []ovalmodels.Package{
425
						{
426
							Name:        "a",
427
							NotFixedYet: false,
428
						},
429
						{
430
							Name:        "b",
431
							NotFixedYet: false,
432
							Version:     "0:1.2.3-45.el6_7.8",
433
						},
434
					},
435
				},
436
				req: request{
437
					packName:       "b",
438
					isSrcPack:      false,
439
					versionRelease: "0:1.2.3-45.el6_7.8",
440
				},
441
			},
442
			affected:    false,
443
			notFixedYet: false,
444
		},
445
		// 8 RedHat
446
		{
447
			in: in{
448
				family: "redhat",
449
				def: ovalmodels.Definition{
450
					AffectedPacks: []ovalmodels.Package{
451
						{
452
							Name:        "a",
453
							NotFixedYet: false,
454
						},
455
						{
456
							Name:        "b",
457
							NotFixedYet: false,
458
							Version:     "0:1.2.3-45.el6_7.8",
459
						},
460
					},
461
				},
462
				req: request{
463
					packName:       "b",
464
					isSrcPack:      false,
465
					versionRelease: "0:1.2.3-45.el6_7.9",
466
				},
467
			},
468
			affected:    false,
469
			notFixedYet: false,
470
		},
471
		// 9 RedHat
472
		{
473
			in: in{
474
				family: "redhat",
475
				def: ovalmodels.Definition{
476
					AffectedPacks: []ovalmodels.Package{
477
						{
478
							Name:        "a",
479
							NotFixedYet: false,
480
						},
481
						{
482
							Name:        "b",
483
							NotFixedYet: false,
484
							Version:     "0:1.2.3-45.el6_7.8",
485
						},
486
					},
487
				},
488
				req: request{
489
					packName:          "b",
490
					isSrcPack:         false,
491
					versionRelease:    "0:1.2.3-45.el6_7.6",
492
					NewVersionRelease: "0:1.2.3-45.el6_7.7",
493
				},
494
			},
495
			affected:    true,
496
			notFixedYet: true,
497
			fixedIn:     "0:1.2.3-45.el6_7.8",
498
		},
499
		// 10 RedHat
500
		{
501
			in: in{
502
				family: "redhat",
503
				def: ovalmodels.Definition{
504
					AffectedPacks: []ovalmodels.Package{
505
						{
506
							Name:        "a",
507
							NotFixedYet: false,
508
						},
509
						{
510
							Name:        "b",
511
							NotFixedYet: false,
512
							Version:     "0:1.2.3-45.el6_7.8",
513
						},
514
					},
515
				},
516
				req: request{
517
					packName:          "b",
518
					isSrcPack:         false,
519
					versionRelease:    "0:1.2.3-45.el6_7.6",
520
					NewVersionRelease: "0:1.2.3-45.el6_7.8",
521
				},
522
			},
523
			affected:    true,
524
			notFixedYet: false,
525
			fixedIn:     "0:1.2.3-45.el6_7.8",
526
		},
527
		// 11 RedHat
528
		{
529
			in: in{
530
				family: "redhat",
531
				def: ovalmodels.Definition{
532
					AffectedPacks: []ovalmodels.Package{
533
						{
534
							Name:        "a",
535
							NotFixedYet: false,
536
						},
537
						{Name: "b",
538
							NotFixedYet: false,
539
							Version:     "0:1.2.3-45.el6_7.8",
540
						},
541
					},
542
				},
543
				req: request{
544
					packName:          "b",
545
					isSrcPack:         false,
546
					versionRelease:    "0:1.2.3-45.el6_7.6",
547
					NewVersionRelease: "0:1.2.3-45.el6_7.9",
548
				},
549
			},
550
			affected:    true,
551
			notFixedYet: false,
552
			fixedIn:     "0:1.2.3-45.el6_7.8",
553
		},
554
		// 12 RedHat
555
		{
556
			in: in{
557
				family: "redhat",
558
				def: ovalmodels.Definition{
559
					AffectedPacks: []ovalmodels.Package{
560
						{
561
							Name:        "a",
562
							NotFixedYet: false,
563
						},
564
						{
565
							Name:        "b",
566
							NotFixedYet: false,
567
							Version:     "0:1.2.3-45.el6_7.8",
568
						},
569
					},
570
				},
571
				req: request{
572
					packName:       "b",
573
					isSrcPack:      false,
574
					versionRelease: "0:1.2.3-45.el6.8",
575
				},
576
			},
577
			affected:    false,
578
			notFixedYet: false,
579
		},
580
		// 13 RedHat
581
		{
582
			in: in{
583
				family: "redhat",
584
				def: ovalmodels.Definition{
585
					AffectedPacks: []ovalmodels.Package{
586
						{
587
							Name:        "a",
588
							NotFixedYet: false,
589
						},
590
						{
591
							Name:        "b",
592
							NotFixedYet: false,
593
							Version:     "0:1.2.3-45.el6.8",
594
						},
595
					},
596
				},
597
				req: request{
598
					packName:       "b",
599
					isSrcPack:      false,
600
					versionRelease: "0:1.2.3-45.el6_7.8",
601
				},
602
			},
603
			affected:    false,
604
			notFixedYet: false,
605
		},
606
		// 14 CentOS
607
		{
608
			in: in{
609
				family: "centos",
610
				def: ovalmodels.Definition{
611
					AffectedPacks: []ovalmodels.Package{
612
						{
613
							Name:        "a",
614
							NotFixedYet: false,
615
						},
616
						{
617
							Name:        "b",
618
							NotFixedYet: false,
619
							Version:     "0:1.2.3-45.el6_7.8",
620
						},
621
					},
622
				},
623
				req: request{
624
					packName:          "b",
625
					isSrcPack:         false,
626
					versionRelease:    "0:1.2.3-45.el6.centos.7",
627
					NewVersionRelease: "",
628
				},
629
			},
630
			affected:    true,
631
			notFixedYet: false,
632
			fixedIn:     "0:1.2.3-45.el6_7.8",
633
		},
634
		// 15
635
		{
636
			in: in{
637
				family: "centos",
638
				def: ovalmodels.Definition{
639
					AffectedPacks: []ovalmodels.Package{
640
						{
641
							Name:        "a",
642
							NotFixedYet: false,
643
						},
644
						{
645
							Name:        "b",
646
							NotFixedYet: false,
647
							Version:     "0:1.2.3-45.el6_7.8",
648
						},
649
					},
650
				},
651
				req: request{
652
					packName:       "b",
653
					isSrcPack:      false,
654
					versionRelease: "0:1.2.3-45.el6.centos.8",
655
				},
656
			},
657
			affected:    false,
658
			notFixedYet: false,
659
		},
660
		// 16
661
		{
662
			in: in{
663
				family: "centos",
664
				def: ovalmodels.Definition{
665
					AffectedPacks: []ovalmodels.Package{
666
						{
667
							Name:        "a",
668
							NotFixedYet: false,
669
						},
670
						{
671
							Name:        "b",
672
							NotFixedYet: false,
673
							Version:     "0:1.2.3-45.el6_7.8",
674
						},
675
					},
676
				},
677
				req: request{
678
					packName:       "b",
679
					isSrcPack:      false,
680
					versionRelease: "0:1.2.3-45.el6.centos.9",
681
				},
682
			},
683
			affected:    false,
684
			notFixedYet: false,
685
		},
686
		// 17
687
		{
688
			in: in{
689
				family: "centos",
690
				def: ovalmodels.Definition{
691
					AffectedPacks: []ovalmodels.Package{
692
						{
693
							Name:        "a",
694
							NotFixedYet: false,
695
						},
696
						{
697
							Name:        "b",
698
							NotFixedYet: false,
699
							Version:     "0:1.2.3-45.el6_7.8",
700
						},
701
					},
702
				},
703
				req: request{
704
					packName:          "b",
705
					isSrcPack:         false,
706
					versionRelease:    "0:1.2.3-45.el6.centos.6",
707
					NewVersionRelease: "0:1.2.3-45.el6.centos.7",
708
				},
709
			},
710
			affected:    true,
711
			notFixedYet: true,
712
			fixedIn:     "0:1.2.3-45.el6_7.8",
713
		},
714
		// 18
715
		{
716
			in: in{
717
				family: "centos",
718
				def: ovalmodels.Definition{
719
					AffectedPacks: []ovalmodels.Package{
720
						{
721
							Name:        "a",
722
							NotFixedYet: false,
723
						},
724
						{
725
							Name:        "b",
726
							NotFixedYet: false,
727
							Version:     "0:1.2.3-45.el6_7.8",
728
						},
729
					},
730
				},
731
				req: request{
732
					packName:          "b",
733
					isSrcPack:         false,
734
					versionRelease:    "0:1.2.3-45.el6.centos.6",
735
					NewVersionRelease: "0:1.2.3-45.el6.centos.8",
736
				},
737
			},
738
			affected:    true,
739
			notFixedYet: false,
740
			fixedIn:     "0:1.2.3-45.el6_7.8",
741
		},
742
		// 19
743
		{
744
			in: in{
745
				family: "centos",
746
				def: ovalmodels.Definition{
747
					AffectedPacks: []ovalmodels.Package{
748
						{
749
							Name:        "a",
750
							NotFixedYet: false,
751
						},
752
						{
753
							Name:        "b",
754
							NotFixedYet: false,
755
							Version:     "0:1.2.3-45.el6_7.8",
756
						},
757
					},
758
				},
759
				req: request{
760
					packName:          "b",
761
					isSrcPack:         false,
762
					versionRelease:    "0:1.2.3-45.el6.centos.6",
763
					NewVersionRelease: "0:1.2.3-45.el6.centos.9",
764
				},
765
			},
766
			affected:    true,
767
			notFixedYet: false,
768
			fixedIn:     "0:1.2.3-45.el6_7.8",
769
		},
770
		// 20
771
		{
772
			in: in{
773
				family: "centos",
774
				def: ovalmodels.Definition{
775
					AffectedPacks: []ovalmodels.Package{
776
						{
777
							Name:        "a",
778
							NotFixedYet: false,
779
						},
780
						{
781
							Name:        "b",
782
							NotFixedYet: false,
783
							Version:     "0:1.2.3-45.el6_7.8",
784
						},
785
					},
786
				},
787
				req: request{
788
					packName:       "b",
789
					isSrcPack:      false,
790
					versionRelease: "0:1.2.3-45.el6.8",
791
				},
792
			},
793
			affected:    false,
794
			notFixedYet: false,
795
		},
796
		// 21
797
		{
798
			in: in{
799
				family: "centos",
800
				def: ovalmodels.Definition{
801
					AffectedPacks: []ovalmodels.Package{
802
						{
803
							Name:        "a",
804
							NotFixedYet: false,
805
						},
806
						{
807
							Name:        "b",
808
							NotFixedYet: false,
809
							Version:     "0:1.2.3-45.el6.8",
810
						},
811
					},
812
				},
813
				req: request{
814
					packName:       "b",
815
					isSrcPack:      false,
816
					versionRelease: "0:1.2.3-45.el6_7.8",
817
				},
818
			},
819
			affected:    false,
820
			notFixedYet: false,
821
		},
822
		// 22
823
		{
824
			in: in{
825
				family: "centos",
826
				def: ovalmodels.Definition{
827
					AffectedPacks: []ovalmodels.Package{
828
						{
829
							Name:        "a",
830
							NotFixedYet: false,
831
						},
832
						{
833
							Name:        "b",
834
							NotFixedYet: false,
835
							Version:     "0:1.2.3-45.el6_7.8",
836
						},
837
					},
838
				},
839
				req: request{
840
					packName:       "b",
841
					isSrcPack:      false,
842
					versionRelease: "0:1.2.3-45.sl6.7",
843
				},
844
			},
845
			affected:    true,
846
			notFixedYet: false,
847
			fixedIn:     "0:1.2.3-45.el6_7.8",
848
		},
849
		{
850
			in: in{
851
				family: "centos",
852
				def: ovalmodels.Definition{
853
					AffectedPacks: []ovalmodels.Package{
854
						{
855
							Name:        "a",
856
							NotFixedYet: false,
857
						},
858
						{
859
							Name:        "b",
860
							NotFixedYet: false,
861
							Version:     "0:1.2.3-45.el6_7.8",
862
						},
863
					},
864
				},
865
				req: request{
866
					packName:       "b",
867
					isSrcPack:      false,
868
					versionRelease: "0:1.2.3-45.sl6.8",
869
				},
870
			},
871
			affected:    false,
872
			notFixedYet: false,
873
		},
874
		{
875
			in: in{
876
				family: "centos",
877
				def: ovalmodels.Definition{
878
					AffectedPacks: []ovalmodels.Package{
879
						{
880
							Name:        "a",
881
							NotFixedYet: false,
882
						},
883
						{
884
							Name:        "b",
885
							NotFixedYet: false,
886
							Version:     "0:1.2.3-45.el6_7.8",
887
						},
888
					},
889
				},
890
				req: request{
891
					packName:       "b",
892
					isSrcPack:      false,
893
					versionRelease: "0:1.2.3-45.sl6.9",
894
				},
895
			},
896
			affected:    false,
897
			notFixedYet: false,
898
		},
899
		{
900
			in: in{
901
				family: "centos",
902
				def: ovalmodels.Definition{
903
					AffectedPacks: []ovalmodels.Package{
904
						{
905
							Name:        "a",
906
							NotFixedYet: false,
907
						},
908
						{
909
							Name:        "b",
910
							NotFixedYet: false,
911
							Version:     "0:1.2.3-45.el6_7.8",
912
						},
913
					},
914
				},
915
				req: request{
916
					packName:          "b",
917
					isSrcPack:         false,
918
					versionRelease:    "0:1.2.3-45.sl6.6",
919
					NewVersionRelease: "0:1.2.3-45.sl6.7",
920
				},
921
			},
922
			affected:    true,
923
			notFixedYet: true,
924
			fixedIn:     "0:1.2.3-45.el6_7.8",
925
		},
926
		{
927
			in: in{
928
				family: "centos",
929
				def: ovalmodels.Definition{
930
					AffectedPacks: []ovalmodels.Package{
931
						{
932
							Name:        "a",
933
							NotFixedYet: false,
934
						},
935
						{
936
							Name:        "b",
937
							NotFixedYet: false,
938
							Version:     "0:1.2.3-45.el6_7.8",
939
						},
940
					},
941
				},
942
				req: request{
943
					packName:          "b",
944
					isSrcPack:         false,
945
					versionRelease:    "0:1.2.3-45.sl6.6",
946
					NewVersionRelease: "0:1.2.3-45.sl6.8",
947
				},
948
			},
949
			affected:    true,
950
			notFixedYet: false,
951
			fixedIn:     "0:1.2.3-45.el6_7.8",
952
		},
953
		{
954
			in: in{
955
				family: "centos",
956
				def: ovalmodels.Definition{
957
					AffectedPacks: []ovalmodels.Package{
958
						{
959
							Name:        "a",
960
							NotFixedYet: false,
961
						},
962
						{
963
							Name:        "b",
964
							NotFixedYet: false,
965
							Version:     "0:1.2.3-45.el6_7.8",
966
						},
967
					},
968
				},
969
				req: request{
970
					packName:          "b",
971
					isSrcPack:         false,
972
					versionRelease:    "0:1.2.3-45.sl6.6",
973
					NewVersionRelease: "0:1.2.3-45.sl6.9",
974
				},
975
			},
976
			affected:    true,
977
			notFixedYet: false,
978
			fixedIn:     "0:1.2.3-45.el6_7.8",
979
		},
980
		{
981
			in: in{
982
				family: "centos",
983
				def: ovalmodels.Definition{
984
					AffectedPacks: []ovalmodels.Package{
985
						{
986
							Name:        "a",
987
							NotFixedYet: false,
988
						},
989
						{
990
							Name:        "b",
991
							NotFixedYet: false,
992
							Version:     "0:1.2.3-45.el6_7.8",
993
						},
994
					},
995
				},
996
				req: request{
997
					packName:       "b",
998
					isSrcPack:      false,
999
					versionRelease: "0:1.2.3-45.el6.8",
1000
				},
1001
			},
1002
			affected:    false,
1003
			notFixedYet: false,
1004
		},
1005
		{
1006
			in: in{
1007
				family: "centos",
1008
				def: ovalmodels.Definition{
1009
					AffectedPacks: []ovalmodels.Package{
1010
						{
1011
							Name:        "a",
1012
							NotFixedYet: false,
1013
						},
1014
						{
1015
							Name:        "b",
1016
							NotFixedYet: false,
1017
							Version:     "0:1.2.3-45.el6.8",
1018
						},
1019
					},
1020
				},
1021
				req: request{
1022
					packName:       "b",
1023
					isSrcPack:      false,
1024
					versionRelease: "0:1.2.3-45.el6_7.8",
1025
				},
1026
			},
1027
			affected:    false,
1028
			notFixedYet: false,
1029
		},
1030
		// For kernel related packages, ignore OVAL with different major versions
1031
		{
1032
			in: in{
1033
				family: config.CentOS,
1034
				def: ovalmodels.Definition{
1035
					AffectedPacks: []ovalmodels.Package{
1036
						{
1037
							Name:        "kernel",
1038
							Version:     "4.1.0",
1039
							NotFixedYet: false,
1040
						},
1041
					},
1042
				},
1043
				req: request{
1044
					packName:          "kernel",
1045
					versionRelease:    "3.0.0",
1046
					NewVersionRelease: "3.2.0",
1047
				},
1048
				kernel: models.Kernel{
1049
					Release: "3.0.0",
1050
				},
1051
			},
1052
			affected:    false,
1053
			notFixedYet: false,
1054
		},
1055
		{
1056
			in: in{
1057
				family: config.CentOS,
1058
				def: ovalmodels.Definition{
1059
					AffectedPacks: []ovalmodels.Package{
1060
						{
1061
							Name:        "kernel",
1062
							Version:     "3.1.0",
1063
							NotFixedYet: false,
1064
						},
1065
					},
1066
				},
1067
				req: request{
1068
					packName:          "kernel",
1069
					versionRelease:    "3.0.0",
1070
					NewVersionRelease: "3.2.0",
1071
				},
1072
				kernel: models.Kernel{
1073
					Release: "3.0.0",
1074
				},
1075
			},
1076
			affected:    true,
1077
			notFixedYet: false,
1078
			fixedIn:     "3.1.0",
1079
		},
1080
	}
1081
	for i, tt := range tests {
1082
		affected, notFixedYet, fixedIn := isOvalDefAffected(tt.in.def, tt.in.req, tt.in.family, tt.in.kernel)
1083
		if tt.affected != affected {
1084
			t.Errorf("[%d] affected\nexpected: %v\n  actual: %v\n", i, tt.affected, affected)
1085
		}
1086
		if tt.notFixedYet != notFixedYet {
1087
			t.Errorf("[%d] notfixedyet\nexpected: %v\n  actual: %v\n", i, tt.notFixedYet, notFixedYet)
1088
		}
1089
		if tt.fixedIn != fixedIn {
1090
			t.Errorf("[%d] fixedIn\nexpected: %v\n  actual: %v\n", i, tt.fixedIn, fixedIn)
1091
		}
1092
	}
1093
}
1094
1095
func TestMajor(t *testing.T) {
1096
	var tests = []struct {
1097
		in       string
1098
		expected string
1099
	}{
1100
		{
1101
			in:       "4.1",
1102
			expected: "4",
1103
		},
1104
		{
1105
			in:       "0:4.1",
1106
			expected: "4",
1107
		},
1108
	}
1109
	for i, tt := range tests {
1110
		a := major(tt.in)
1111
		if tt.expected != a {
1112
			t.Errorf("[%d]\nexpected: %s\n  actual: %s\n", i, tt.expected, a)
1113
		}
1114
	}
1115
}
1116