File: redis_test.go

package info (click to toggle)
go-cpe-dictionary 0.0~git20181107.61280e8-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 208 kB
  • sloc: makefile: 2
file content (128 lines) | stat: -rw-r--r-- 3,082 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package db

import (
	"reflect"
	"strings"
	"testing"

	"github.com/kotakanbe/go-cpe-dictionary/testutil"
)

func TestGetVendorProducts(t *testing.T) {
	var err error

	type Expected struct {
		VendorProduct []string
		ErrString     string
	}

	cases := map[string]struct {
		Expected Expected
	}{
		"OK": {
			Expected: Expected{
				VendorProduct: []string{
					"vendorName1::productName1-1",
					"vendorName1::productName1-2",
					"vendorName2::productName2",
					"vendorName3::productName3",
					"vendorName4::productName4",
					"vendorName5::productName5",
					"vendorName6::productName6",
				},
			},
		},
	}

	s, err := testutil.PrepareTestRedis()
	if err != nil {
		panic(err)
	}
	defer s.Close()

	var driver DB
	if driver, err = NewDB("redis", "redis://"+s.Addr(), false); err != nil {
		t.Error(err)
	}
	for k, tc := range cases {
		var vendorProducts []string
		if vendorProducts, err = driver.GetVendorProducts(); err != nil {
			if !strings.Contains(err.Error(), tc.Expected.ErrString) {
				t.Errorf("%s : actual %s, expected %s", k, err, tc.Expected.ErrString)
				continue
			}
			if len(tc.Expected.ErrString) == 0 {
				t.Errorf("%s : actual %s, expected %s", k, err, tc.Expected.ErrString)
				continue
			}
		} else if 0 < len(tc.Expected.ErrString) {
			t.Errorf("%s : actual %s, expected %s", k, err, tc.Expected.ErrString)
		}
		if !reflect.DeepEqual(vendorProducts, tc.Expected.VendorProduct) {
			t.Errorf("%s: actual %#v, expected %#v", k, vendorProducts, tc.Expected.VendorProduct)
		}
	}
}

func TestGetCpesByVendorProduct(t *testing.T) {
	var err error

	type Expected struct {
		CpeURIs   []string
		ErrString string
	}

	cases := map[string]struct {
		Vendor   string
		Product  string
		Expected Expected
	}{
		"OK": {
			Vendor:  "vendorName1",
			Product: "productName1-1",
			Expected: Expected{
				CpeURIs: []string{
					"cpe:/a:vendorName1:productName1-1:1.1:*:*:*:*:targetSoftware1:targetHardware1:*",
				},
			},
		},
		"OK2": {
			Vendor:  "vendorName1",
			Product: "productName1-2",
			Expected: Expected{
				CpeURIs: []string{
					"cpe:/a:vendorName1:productName1-2:1.2:*:*:*:*:targetSoftware1:targetHardware1:*",
				},
			},
		},
	}

	s, err := testutil.PrepareTestRedis()
	if err != nil {
		panic(err)
	}
	defer s.Close()

	var driver DB
	if driver, err = NewDB("redis", "redis://"+s.Addr(), false); err != nil {
		t.Error(err)
	}
	for k, tc := range cases {
		var cpeURIs []string
		if cpeURIs, err = driver.GetCpesByVendorProduct(tc.Vendor, tc.Product); err != nil {
			if !strings.Contains(err.Error(), tc.Expected.ErrString) {
				t.Errorf("%s : actual %s, expected %s", k, err, tc.Expected.ErrString)
				continue
			}
			if len(tc.Expected.ErrString) == 0 {
				t.Errorf("%s : actual %s, expected %s", k, err, tc.Expected.ErrString)
				continue
			}
		} else if 0 < len(tc.Expected.ErrString) {
			t.Errorf("%s : actual %s, expected %s", k, err, tc.Expected.ErrString)
		}
		if !reflect.DeepEqual(cpeURIs, tc.Expected.CpeURIs) {
			t.Errorf("%s: actual %#v, expected %#v", k, cpeURIs, tc.Expected.CpeURIs)
		}
	}
}