@@ -29,24 +29,24 @@ func TestXsetNoByz(t *testing.T) {
29
29
Pset : nil ,
30
30
Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )},
31
31
& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
32
- Executed : 1 ,
32
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
33
33
},
34
34
& ViewChange {
35
- View : 3 ,
36
- Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
37
- Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
38
- Executed : 1 ,
35
+ View : 3 ,
36
+ Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
37
+ Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
38
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
39
39
},
40
40
& ViewChange {
41
41
View : 3 ,
42
42
Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
43
43
Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )},
44
44
& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
45
- Executed : 1 ,
45
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
46
46
},
47
47
}
48
48
49
- xset , ok := s .makeXset (vcs )
49
+ xset , _ , ok := s .makeXset (vcs )
50
50
if ! ok {
51
51
t .Fatal ("no xset" )
52
52
}
@@ -56,31 +56,66 @@ func TestXsetNoByz(t *testing.T) {
56
56
}
57
57
}
58
58
59
+ func TestXsetNoNew (t * testing.T ) {
60
+ s := & SBFT {config : Config {N : 4 , F : 1 }, view : 3 }
61
+ prev := s .makeBatch (2 , []byte ("prev" ), nil )
62
+ vcs := []* ViewChange {
63
+ & ViewChange {
64
+ View : 3 ,
65
+ Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
66
+ Qset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
67
+ Checkpoint : prev ,
68
+ },
69
+ & ViewChange {
70
+ View : 3 ,
71
+ Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
72
+ Qset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
73
+ Checkpoint : prev ,
74
+ },
75
+ & ViewChange {
76
+ View : 3 ,
77
+ Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
78
+ Qset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
79
+ Checkpoint : prev ,
80
+ },
81
+ }
82
+
83
+ _ , newBatch , ok := s .makeXset (vcs )
84
+ if ! ok {
85
+ t .Fatal ("no xset" )
86
+ }
87
+
88
+ expect := s .makeBatch (3 , prev .Hash (), nil )
89
+ if ! reflect .DeepEqual (newBatch , expect ) {
90
+ t .Errorf ("batches don't match: %v, %v" , newBatch .DecodeHeader (), expect .DecodeHeader ())
91
+ }
92
+ }
93
+
59
94
func TestXsetByz0 (t * testing.T ) {
60
95
s := & SBFT {config : Config {N : 4 , F : 1 }, view : 3 }
61
96
vcs := []* ViewChange {
62
97
& ViewChange {
63
- View : 3 ,
64
- Pset : nil ,
65
- Qset : nil ,
66
- Executed : 1 ,
98
+ View : 3 ,
99
+ Pset : nil ,
100
+ Qset : nil ,
101
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
67
102
},
68
103
& ViewChange {
69
- View : 3 ,
70
- Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
71
- Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
72
- Executed : 1 ,
104
+ View : 3 ,
105
+ Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
106
+ Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
107
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
73
108
},
74
109
& ViewChange {
75
110
View : 3 ,
76
111
Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
77
112
Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )},
78
113
& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
79
- Executed : 1 ,
114
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
80
115
},
81
116
}
82
117
83
- xset , ok := s .makeXset (vcs )
118
+ xset , _ , ok := s .makeXset (vcs )
84
119
if ok {
85
120
t .Error ("should not have received an xset" )
86
121
}
@@ -90,10 +125,10 @@ func TestXsetByz0(t *testing.T) {
90
125
Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
91
126
Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )},
92
127
& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
93
- Executed : 2 ,
128
+ Checkpoint : s . makeBatch ( 2 , [] byte ( "prev" ), nil ) ,
94
129
})
95
130
96
- xset , ok = s .makeXset (vcs )
131
+ xset , _ , ok = s .makeXset (vcs )
97
132
if ! ok {
98
133
t .Error ("no xset" )
99
134
}
@@ -106,39 +141,39 @@ func TestXsetByz2(t *testing.T) {
106
141
s := & SBFT {config : Config {N : 4 , F : 1 }, view : 3 }
107
142
vcs := []* ViewChange {
108
143
& ViewChange {
109
- View : 3 ,
110
- Pset : nil ,
111
- Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
112
- Executed : 1 ,
144
+ View : 3 ,
145
+ Pset : nil ,
146
+ Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
147
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
113
148
},
114
149
& ViewChange {
115
- View : 3 ,
116
- Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
117
- Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
118
- Executed : 1 ,
150
+ View : 3 ,
151
+ Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
152
+ Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
153
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
119
154
},
120
155
& ViewChange {
121
156
View : 3 ,
122
157
Pset : []* Subject {& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
123
158
Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )},
124
159
& Subject {& SeqView {2 , 2 }, []byte ("val2" )}},
125
- Executed : 1 ,
160
+ Checkpoint : s . makeBatch ( 1 , [] byte ( "prev" ), nil ) ,
126
161
},
127
162
}
128
163
129
- xset , ok := s .makeXset (vcs )
164
+ xset , _ , ok := s .makeXset (vcs )
130
165
if ok {
131
166
t .Error ("should not have received an xset" )
132
167
}
133
168
134
169
vcs = append (vcs , & ViewChange {
135
- View : 3 ,
136
- Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
137
- Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
138
- Executed : 2 ,
170
+ View : 3 ,
171
+ Pset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
172
+ Qset : []* Subject {& Subject {& SeqView {1 , 2 }, []byte ("val1" )}},
173
+ Checkpoint : s . makeBatch ( 2 , [] byte ( "prev" ), nil ) ,
139
174
})
140
175
141
- xset , ok = s .makeXset (vcs )
176
+ xset , _ , ok = s .makeXset (vcs )
142
177
if ! ok {
143
178
t .Error ("no xset" )
144
179
}
0 commit comments