-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtrusttier_test.go
175 lines (149 loc) · 3.8 KB
/
trusttier_test.go
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package ear
import (
"fmt"
"math"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestTrustTier_MarshalJSON_pass(t *testing.T) {
tvs := []struct {
status TrustTier
expected string
}{
{
status: TrustTierNone,
expected: `"none"`,
},
{
status: TrustTierAffirming,
expected: `"affirming"`,
},
{
status: TrustTierWarning,
expected: `"warning"`,
},
{
status: TrustTierContraindicated,
expected: `"contraindicated"`,
},
}
for _, tv := range tvs {
actual, err := tv.status.MarshalJSON()
assert.NoError(t, err)
assert.JSONEq(t, tv.expected, string(actual))
}
}
func TestTrustTier_MarshalJSON_fail(t *testing.T) {
tvs := []struct {
status TrustTier
expected string
}{
{
status: TrustTier(123),
expected: `unknown trust tier '123'`,
},
}
for i, tv := range tvs {
_, err := tv.status.MarshalJSON()
assert.EqualError(t, err, tv.expected, "failed test vector at index %d", i)
}
}
func TestTrustTier_UnmarshalJSON_pass(t *testing.T) {
tvs := []struct {
status string
expected TrustTier
}{
{
status: `"none"`,
expected: TrustTierNone,
},
{
status: `"affirming"`,
expected: TrustTierAffirming,
},
{
status: `"warning"`,
expected: TrustTierWarning,
},
{
status: `"contraindicated"`,
expected: TrustTierContraindicated,
},
}
for i, tv := range tvs {
var actual TrustTier
err := actual.UnmarshalJSON([]byte(tv.status))
assert.NoError(t, err)
assert.Equal(t, tv.expected, actual, "failed test vector at index %d", i)
}
}
func TestTrustTier_UnmarshalJSON_fail(t *testing.T) {
tvs := []struct {
status string
expected string
}{
{
status: `"unknown string"`,
expected: `unknown trust tier 'unknown string'`,
},
{
status: `"1000000"`,
expected: `unknown trust tier '1000000'`,
},
{
status: `[]`,
expected: `unable to decode trust tier '[]': json: cannot unmarshal array into Go value of type string`,
},
{
status: `"none`,
expected: `unable to decode trust tier '"none': unexpected end of JSON input`,
},
}
for i, tv := range tvs {
var actual TrustTier
err := actual.UnmarshalJSON([]byte(tv.status))
assert.EqualError(t, err, tv.expected, "failed test vector at index %d", i)
}
}
func TestTrustTier_ToTrustTier(t *testing.T) {
var tt *TrustTier
var err error
tt, err = ToTrustTier(2)
require.NoError(t, err)
assert.Equal(t, TrustTierAffirming, *tt)
tt, err = ToTrustTier(2.5)
require.NoError(t, err)
assert.Equal(t, TrustTierAffirming, *tt)
_, err = ToTrustTier(3.1)
assert.ErrorContains(t, err, "not a valid TrustTier value: 3.100000 (3)")
_, err = ToTrustTier(math.MaxFloat32)
assert.ErrorContains(t, err, "not a valid TrustTier value: 34028234")
tt, err = ToTrustTier(int8(32))
require.NoError(t, err)
assert.Equal(t, TrustTierWarning, *tt)
_, err = ToTrustTier(uint64(math.MaxUint64))
assert.ErrorContains(t, err,
fmt.Sprintf("not a valid TrustTier value: %d", uint64(math.MaxUint64)))
tt, err = ToTrustTier("affirming")
require.NoError(t, err)
assert.Equal(t, TrustTierAffirming, *tt)
tt, err = ToTrustTier("96")
require.NoError(t, err)
assert.Equal(t, TrustTierContraindicated, *tt)
tt, err = ToTrustTier([]byte{0x33, 0x32}) // "32"
require.NoError(t, err)
assert.Equal(t, TrustTierWarning, *tt)
_, err = ToTrustTier("totally safe")
assert.ErrorContains(t, err, `not a valid TrustTier name: "totally safe"`)
tt, err = ToTrustTier(UnrecognizedHardwareClaim)
require.NoError(t, err)
assert.Equal(t, TrustTierContraindicated, *tt)
tt, err = ToTrustTier(TrustTierContraindicated)
require.NoError(t, err)
assert.Equal(t, TrustTierContraindicated, *tt)
taff := TrustTierAffirming
tt, err = ToTrustTier(&taff)
require.NoError(t, err)
assert.Equal(t, TrustTierAffirming, *tt)
}