@@ -45,24 +45,24 @@ func TestValidator(t *testing.T) {
45
45
46
46
//populate db with initial data
47
47
batch := statedb .NewUpdateBatch ()
48
- batch .Put ("ns1" , "key1" , []byte ("value1" ), version .NewHeight (1 , 1 ))
49
- batch .Put ("ns1" , "key2" , []byte ("value2" ), version .NewHeight (1 , 2 ))
50
- batch .Put ("ns1" , "key3" , []byte ("value3" ), version .NewHeight (1 , 3 ))
51
- batch .Put ("ns1" , "key4" , []byte ("value4" ), version .NewHeight (1 , 4 ))
52
- batch .Put ("ns1" , "key5" , []byte ("value5" ), version .NewHeight (1 , 5 ))
53
- db .ApplyUpdates (batch , version .NewHeight (1 , 5 ))
48
+ batch .Put ("ns1" , "key1" , []byte ("value1" ), version .NewHeight (1 , 0 ))
49
+ batch .Put ("ns1" , "key2" , []byte ("value2" ), version .NewHeight (1 , 1 ))
50
+ batch .Put ("ns1" , "key3" , []byte ("value3" ), version .NewHeight (1 , 2 ))
51
+ batch .Put ("ns1" , "key4" , []byte ("value4" ), version .NewHeight (1 , 3 ))
52
+ batch .Put ("ns1" , "key5" , []byte ("value5" ), version .NewHeight (1 , 4 ))
53
+ db .ApplyUpdates (batch , version .NewHeight (1 , 4 ))
54
54
55
55
validator := NewValidator (db )
56
56
57
57
//rwset1 should be valid
58
58
rwsetBuilder1 := rwsetutil .NewRWSetBuilder ()
59
- rwsetBuilder1 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 1 ))
59
+ rwsetBuilder1 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 0 ))
60
60
rwsetBuilder1 .AddToReadSet ("ns2" , "key2" , nil )
61
61
checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder1 .GetTxReadWriteSet ()}, []int {})
62
62
63
63
//rwset2 should not be valid
64
64
rwsetBuilder2 := rwsetutil .NewRWSetBuilder ()
65
- rwsetBuilder2 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 2 ))
65
+ rwsetBuilder2 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 1 ))
66
66
checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder2 .GetTxReadWriteSet ()}, []int {0 })
67
67
68
68
//rwset3 should not be valid
@@ -72,11 +72,11 @@ func TestValidator(t *testing.T) {
72
72
73
73
// rwset4 and rwset5 within same block - rwset4 should be valid and makes rwset5 as invalid
74
74
rwsetBuilder4 := rwsetutil .NewRWSetBuilder ()
75
- rwsetBuilder4 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 1 ))
75
+ rwsetBuilder4 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 0 ))
76
76
rwsetBuilder4 .AddToWriteSet ("ns1" , "key1" , []byte ("value1_new" ))
77
77
78
78
rwsetBuilder5 := rwsetutil .NewRWSetBuilder ()
79
- rwsetBuilder5 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 1 ))
79
+ rwsetBuilder5 .AddToReadSet ("ns1" , "key1" , version .NewHeight (1 , 0 ))
80
80
checkValidation (t , validator ,
81
81
[]* rwsetutil.TxRwSet {rwsetBuilder4 .GetTxReadWriteSet (), rwsetBuilder5 .GetTxReadWriteSet ()}, []int {1 })
82
82
}
@@ -90,52 +90,52 @@ func TestPhantomValidation(t *testing.T) {
90
90
91
91
//populate db with initial data
92
92
batch := statedb .NewUpdateBatch ()
93
- batch .Put ("ns1" , "key1" , []byte ("value1" ), version .NewHeight (1 , 1 ))
94
- batch .Put ("ns1" , "key2" , []byte ("value2" ), version .NewHeight (1 , 2 ))
95
- batch .Put ("ns1" , "key3" , []byte ("value3" ), version .NewHeight (1 , 3 ))
96
- batch .Put ("ns1" , "key4" , []byte ("value4" ), version .NewHeight (1 , 4 ))
97
- batch .Put ("ns1" , "key5" , []byte ("value5" ), version .NewHeight (1 , 5 ))
98
- db .ApplyUpdates (batch , version .NewHeight (1 , 5 ))
93
+ batch .Put ("ns1" , "key1" , []byte ("value1" ), version .NewHeight (1 , 0 ))
94
+ batch .Put ("ns1" , "key2" , []byte ("value2" ), version .NewHeight (1 , 1 ))
95
+ batch .Put ("ns1" , "key3" , []byte ("value3" ), version .NewHeight (1 , 2 ))
96
+ batch .Put ("ns1" , "key4" , []byte ("value4" ), version .NewHeight (1 , 3 ))
97
+ batch .Put ("ns1" , "key5" , []byte ("value5" ), version .NewHeight (1 , 4 ))
98
+ db .ApplyUpdates (batch , version .NewHeight (1 , 4 ))
99
99
100
100
validator := NewValidator (db )
101
101
102
102
//rwset1 should be valid
103
103
rwsetBuilder1 := rwsetutil .NewRWSetBuilder ()
104
104
rqi1 := & kvrwset.RangeQueryInfo {StartKey : "key2" , EndKey : "key4" , ItrExhausted : true }
105
105
rqi1 .SetRawReads ([]* kvrwset.KVRead {
106
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
107
- rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 3 ))})
106
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
107
+ rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 2 ))})
108
108
rwsetBuilder1 .AddToRangeQuerySet ("ns1" , rqi1 )
109
109
checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder1 .GetTxReadWriteSet ()}, []int {})
110
110
111
111
//rwset2 should not be valid - Version of key4 changed
112
112
rwsetBuilder2 := rwsetutil .NewRWSetBuilder ()
113
113
rqi2 := & kvrwset.RangeQueryInfo {StartKey : "key2" , EndKey : "key4" , ItrExhausted : false }
114
114
rqi2 .SetRawReads ([]* kvrwset.KVRead {
115
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
116
- rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 3 )),
117
- rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 3 ))})
115
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
116
+ rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 2 )),
117
+ rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 2 ))})
118
118
rwsetBuilder2 .AddToRangeQuerySet ("ns1" , rqi2 )
119
- checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder2 .GetTxReadWriteSet ()}, []int {1 })
119
+ checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder2 .GetTxReadWriteSet ()}, []int {0 })
120
120
121
121
//rwset3 should not be valid - simulate key3 got commited to db
122
122
rwsetBuilder3 := rwsetutil .NewRWSetBuilder ()
123
123
rqi3 := & kvrwset.RangeQueryInfo {StartKey : "key2" , EndKey : "key4" , ItrExhausted : false }
124
124
rqi3 .SetRawReads ([]* kvrwset.KVRead {
125
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
126
- rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 4 ))})
125
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
126
+ rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 3 ))})
127
127
rwsetBuilder3 .AddToRangeQuerySet ("ns1" , rqi3 )
128
- checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder3 .GetTxReadWriteSet ()}, []int {1 })
128
+ checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder3 .GetTxReadWriteSet ()}, []int {0 })
129
129
130
130
// //Remove a key in rwset4 and rwset5 should become invalid
131
131
rwsetBuilder4 := rwsetutil .NewRWSetBuilder ()
132
132
rwsetBuilder4 .AddToWriteSet ("ns1" , "key3" , nil )
133
133
rwsetBuilder5 := rwsetutil .NewRWSetBuilder ()
134
134
rqi5 := & kvrwset.RangeQueryInfo {StartKey : "key2" , EndKey : "key4" , ItrExhausted : false }
135
135
rqi5 .SetRawReads ([]* kvrwset.KVRead {
136
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
137
- rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 3 )),
138
- rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 4 ))})
136
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
137
+ rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 2 )),
138
+ rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 3 ))})
139
139
rwsetBuilder5 .AddToRangeQuerySet ("ns1" , rqi5 )
140
140
checkValidation (t , validator , []* rwsetutil.TxRwSet {
141
141
rwsetBuilder4 .GetTxReadWriteSet (), rwsetBuilder5 .GetTxReadWriteSet ()}, []int {1 })
@@ -147,9 +147,9 @@ func TestPhantomValidation(t *testing.T) {
147
147
rwsetBuilder7 := rwsetutil .NewRWSetBuilder ()
148
148
rqi7 := & kvrwset.RangeQueryInfo {StartKey : "key2" , EndKey : "key4" , ItrExhausted : false }
149
149
rqi7 .SetRawReads ([]* kvrwset.KVRead {
150
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
151
- rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 3 )),
152
- rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 4 ))})
150
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
151
+ rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 2 )),
152
+ rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 3 ))})
153
153
rwsetBuilder7 .AddToRangeQuerySet ("ns1" , rqi7 )
154
154
checkValidation (t , validator , []* rwsetutil.TxRwSet {
155
155
rwsetBuilder6 .GetTxReadWriteSet (), rwsetBuilder7 .GetTxReadWriteSet ()}, []int {1 })
@@ -164,29 +164,29 @@ func TestPhantomHashBasedValidation(t *testing.T) {
164
164
165
165
//populate db with initial data
166
166
batch := statedb .NewUpdateBatch ()
167
- batch .Put ("ns1" , "key1" , []byte ("value1" ), version .NewHeight (1 , 1 ))
168
- batch .Put ("ns1" , "key2" , []byte ("value2" ), version .NewHeight (1 , 2 ))
169
- batch .Put ("ns1" , "key3" , []byte ("value3" ), version .NewHeight (1 , 3 ))
170
- batch .Put ("ns1" , "key4" , []byte ("value4" ), version .NewHeight (1 , 4 ))
171
- batch .Put ("ns1" , "key5" , []byte ("value5" ), version .NewHeight (1 , 5 ))
172
- batch .Put ("ns1" , "key6" , []byte ("value6" ), version .NewHeight (1 , 6 ))
173
- batch .Put ("ns1" , "key7" , []byte ("value7" ), version .NewHeight (1 , 7 ))
174
- batch .Put ("ns1" , "key8" , []byte ("value8" ), version .NewHeight (1 , 8 ))
175
- batch .Put ("ns1" , "key9" , []byte ("value9" ), version .NewHeight (1 , 9 ))
176
- db .ApplyUpdates (batch , version .NewHeight (1 , 9 ))
167
+ batch .Put ("ns1" , "key1" , []byte ("value1" ), version .NewHeight (1 , 0 ))
168
+ batch .Put ("ns1" , "key2" , []byte ("value2" ), version .NewHeight (1 , 1 ))
169
+ batch .Put ("ns1" , "key3" , []byte ("value3" ), version .NewHeight (1 , 2 ))
170
+ batch .Put ("ns1" , "key4" , []byte ("value4" ), version .NewHeight (1 , 3 ))
171
+ batch .Put ("ns1" , "key5" , []byte ("value5" ), version .NewHeight (1 , 4 ))
172
+ batch .Put ("ns1" , "key6" , []byte ("value6" ), version .NewHeight (1 , 5 ))
173
+ batch .Put ("ns1" , "key7" , []byte ("value7" ), version .NewHeight (1 , 6 ))
174
+ batch .Put ("ns1" , "key8" , []byte ("value8" ), version .NewHeight (1 , 7 ))
175
+ batch .Put ("ns1" , "key9" , []byte ("value9" ), version .NewHeight (1 , 8 ))
176
+ db .ApplyUpdates (batch , version .NewHeight (1 , 8 ))
177
177
178
178
validator := NewValidator (db )
179
179
180
180
rwsetBuilder1 := rwsetutil .NewRWSetBuilder ()
181
181
rqi1 := & kvrwset.RangeQueryInfo {StartKey : "key2" , EndKey : "key9" , ItrExhausted : true }
182
182
kvReadsDuringSimulation1 := []* kvrwset.KVRead {
183
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
184
- rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 3 )),
185
- rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 4 )),
186
- rwsetutil .NewKVRead ("key5" , version .NewHeight (1 , 5 )),
187
- rwsetutil .NewKVRead ("key6" , version .NewHeight (1 , 6 )),
188
- rwsetutil .NewKVRead ("key7" , version .NewHeight (1 , 7 )),
189
- rwsetutil .NewKVRead ("key8" , version .NewHeight (1 , 8 )),
183
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
184
+ rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 2 )),
185
+ rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 3 )),
186
+ rwsetutil .NewKVRead ("key5" , version .NewHeight (1 , 4 )),
187
+ rwsetutil .NewKVRead ("key6" , version .NewHeight (1 , 5 )),
188
+ rwsetutil .NewKVRead ("key7" , version .NewHeight (1 , 6 )),
189
+ rwsetutil .NewKVRead ("key8" , version .NewHeight (1 , 7 )),
190
190
}
191
191
rqi1 .SetMerkelSummary (buildTestHashResults (t , 2 , kvReadsDuringSimulation1 ))
192
192
rwsetBuilder1 .AddToRangeQuerySet ("ns1" , rqi1 )
@@ -195,19 +195,19 @@ func TestPhantomHashBasedValidation(t *testing.T) {
195
195
rwsetBuilder2 := rwsetutil .NewRWSetBuilder ()
196
196
rqi2 := & kvrwset.RangeQueryInfo {StartKey : "key1" , EndKey : "key9" , ItrExhausted : false }
197
197
kvReadsDuringSimulation2 := []* kvrwset.KVRead {
198
- rwsetutil .NewKVRead ("key1" , version .NewHeight (1 , 1 )),
199
- rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 2 )),
200
- rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 2 )),
201
- rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 4 )),
202
- rwsetutil .NewKVRead ("key5" , version .NewHeight (1 , 5 )),
203
- rwsetutil .NewKVRead ("key6" , version .NewHeight (1 , 6 )),
204
- rwsetutil .NewKVRead ("key7" , version .NewHeight (1 , 7 )),
205
- rwsetutil .NewKVRead ("key8" , version .NewHeight (1 , 8 )),
206
- rwsetutil .NewKVRead ("key9" , version .NewHeight (1 , 9 )),
198
+ rwsetutil .NewKVRead ("key1" , version .NewHeight (1 , 0 )),
199
+ rwsetutil .NewKVRead ("key2" , version .NewHeight (1 , 1 )),
200
+ rwsetutil .NewKVRead ("key3" , version .NewHeight (1 , 1 )),
201
+ rwsetutil .NewKVRead ("key4" , version .NewHeight (1 , 3 )),
202
+ rwsetutil .NewKVRead ("key5" , version .NewHeight (1 , 4 )),
203
+ rwsetutil .NewKVRead ("key6" , version .NewHeight (1 , 5 )),
204
+ rwsetutil .NewKVRead ("key7" , version .NewHeight (1 , 6 )),
205
+ rwsetutil .NewKVRead ("key8" , version .NewHeight (1 , 7 )),
206
+ rwsetutil .NewKVRead ("key9" , version .NewHeight (1 , 8 )),
207
207
}
208
208
rqi2 .SetMerkelSummary (buildTestHashResults (t , 2 , kvReadsDuringSimulation2 ))
209
209
rwsetBuilder2 .AddToRangeQuerySet ("ns1" , rqi2 )
210
- checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder2 .GetTxReadWriteSet ()}, []int {1 })
210
+ checkValidation (t , validator , []* rwsetutil.TxRwSet {rwsetBuilder2 .GetTxReadWriteSet ()}, []int {0 })
211
211
}
212
212
213
213
func checkValidation (t * testing.T , validator * Validator , rwsets []* rwsetutil.TxRwSet , invalidTxIndexes []int ) {
@@ -221,15 +221,15 @@ func checkValidation(t *testing.T, validator *Validator, rwsets []*rwsetutil.TxR
221
221
block .Metadata .Metadata [common .BlockMetadataIndex_TRANSACTIONS_FILTER ] = util .NewTxValidationFlags (len (block .Data .Data ))
222
222
_ , err := validator .ValidateAndPrepareBatch (block , true )
223
223
txsFltr := util .TxValidationFlags (block .Metadata .Metadata [common .BlockMetadataIndex_TRANSACTIONS_FILTER ])
224
- invalidTxNum := 0
224
+ invalidTxs := make ([] int , 0 )
225
225
for i := 0 ; i < len (block .Data .Data ); i ++ {
226
226
if txsFltr .IsInvalid (i ) {
227
- invalidTxNum ++
227
+ invalidTxs = append ( invalidTxs , i )
228
228
}
229
229
}
230
230
testutil .AssertNoError (t , err , "" )
231
- testutil .AssertEquals (t , invalidTxNum , len (invalidTxIndexes ))
232
- //TODO Add the check for exact txnum that is marked invlid when bitarray is in place
231
+ testutil .AssertEquals (t , len ( invalidTxs ) , len (invalidTxIndexes ))
232
+ testutil . AssertContainsAll ( t , invalidTxs , invalidTxIndexes )
233
233
}
234
234
235
235
func buildTestHashResults (t * testing.T , maxDegree int , kvReads []* kvrwset.KVRead ) * kvrwset.QueryReadsMerkleSummary {
0 commit comments