-
Notifications
You must be signed in to change notification settings - Fork 162
/
inserter_test.go
100 lines (95 loc) · 2.89 KB
/
inserter_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
// Copyright 2019 Anapaya Systems
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package trust_test
import (
"context"
"testing"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"golang.org/x/xerrors"
"github.com/scionproto/scion/go/lib/infra/modules/trust/v2"
"github.com/scionproto/scion/go/lib/infra/modules/trust/v2/internal/decoded"
"github.com/scionproto/scion/go/lib/infra/modules/trust/v2/mock_v2"
)
func TestInserterInsertTRC(t *testing.T) {
tests := map[string]struct {
Expect func(*mock_v2.MockDB, decoded.TRC)
Unsafe bool
ExpectedErr error
}{
"Exists with same contents": {
Expect: func(db *mock_v2.MockDB, decTRC decoded.TRC) {
db.EXPECT().TRCExists(gomock.Any(), decTRC).Return(
true, nil,
)
},
},
"Exists with different contents": {
Expect: func(db *mock_v2.MockDB, decTRC decoded.TRC) {
db.EXPECT().TRCExists(gomock.Any(), decTRC).Return(
true, trust.ErrContentMismatch,
)
},
ExpectedErr: trust.ErrContentMismatch,
},
"Base TRC and unsafe set": {
Expect: func(db *mock_v2.MockDB, decTRC decoded.TRC) {
db.EXPECT().TRCExists(gomock.Any(), decTRC).Return(
false, nil,
)
db.EXPECT().InsertTRC(gomock.Any(), decTRC).Return(true, nil)
},
Unsafe: true,
},
"Base TRC and unsafe set, insert fail": {
Expect: func(db *mock_v2.MockDB, decTRC decoded.TRC) {
db.EXPECT().TRCExists(gomock.Any(), decTRC).Return(
false, nil,
)
db.EXPECT().InsertTRC(gomock.Any(), decTRC).Return(
false, trust.ErrContentMismatch,
)
},
ExpectedErr: trust.ErrContentMismatch,
Unsafe: true,
},
"Base TRC and unsafe not set": {
Expect: func(db *mock_v2.MockDB, decTRC decoded.TRC) {
db.EXPECT().TRCExists(gomock.Any(), decTRC).Return(
false, nil,
)
},
ExpectedErr: trust.ErrBaseNotSupported,
},
}
for name, test := range tests {
t.Run(name, func(t *testing.T) {
mctrl := gomock.NewController(t)
defer mctrl.Finish()
// Prepare the test.
db := mock_v2.NewMockDB(mctrl)
decoded := loadTRC(t, trc1v1)
test.Expect(db, decoded)
ins := trust.NewInserter(db, test.Unsafe)
// Insert the TRC.
err := ins.InsertTRC(context.Background(), decoded, nil)
if test.ExpectedErr != nil {
require.Truef(t, xerrors.Is(err, test.ExpectedErr),
"Expected: %s Actual: %s", test.ExpectedErr, err)
} else {
require.NoError(t, err)
}
})
}
}