@@ -125,12 +125,14 @@ impl CoreMethods for SharedCore {
125
125
mod tests {
126
126
127
127
use super :: * ;
128
- use crate :: replication:: events:: { Get , Have } ;
128
+
129
+ use crate :: core:: tests:: { create_hypercore_with_data, create_hypercore_with_data_and_key_pair} ;
129
130
#[ async_std:: test]
130
131
async fn shared_core_methods ( ) -> Result < ( ) , CoreMethodsError > {
131
132
let core = crate :: core:: tests:: create_hypercore_with_data ( 0 ) . await ?;
132
133
let core = SharedCore :: from ( core) ;
133
134
135
+ // check CoreInfo
134
136
let info = core. info ( ) . await ;
135
137
assert_eq ! (
136
138
info,
@@ -146,6 +148,7 @@ mod tests {
146
148
// key_pair is random, nothing to test here
147
149
let _kp = core. key_pair ( ) . await ;
148
150
151
+ // check CoreMethods
149
152
assert_eq ! ( core. has( 0 ) . await , false ) ;
150
153
assert_eq ! ( core. get( 0 ) . await ?, None ) ;
151
154
let res = core. append ( b"foo" ) . await ?;
@@ -172,61 +175,50 @@ mod tests {
172
175
}
173
176
174
177
#[ async_std:: test]
175
- async fn test_events ( ) -> Result < ( ) , CoreMethodsError > {
176
- let mut core = crate :: core:: tests:: create_hypercore_with_data ( 0 ) . await ?;
177
-
178
- // Check that appending data emits a DataUpgrade and Have event
179
-
180
- let mut rx = core. event_subscribe ( ) ;
181
- let handle = async_std:: task:: spawn ( async move {
182
- let mut out = vec ! [ ] ;
183
- loop {
184
- if out. len ( ) == 2 {
185
- return ( out, rx) ;
186
- }
187
- if let Ok ( evt) = rx. recv ( ) . await {
188
- out. push ( evt) ;
189
- }
190
- }
191
- } ) ;
192
- core. append ( b"foo" ) . await ?;
193
- let ( res, mut rx) = handle. await ;
194
- assert ! ( matches!( res[ 0 ] , Event :: DataUpgrade ( _) ) ) ;
195
- assert ! ( matches!(
196
- res[ 1 ] ,
197
- Event :: Have ( Have {
198
- start: 0 ,
199
- length: 1 ,
200
- drop: false
201
- } )
202
- ) ) ;
203
- // no messages in queue
204
- assert ! ( rx. is_empty( ) ) ;
205
-
206
- // Check that Hypercore::get for missing data emits a Get event
207
-
208
- let handle = async_std:: task:: spawn ( async move {
209
- let mut out = vec ! [ ] ;
210
- loop {
211
- if out. len ( ) == 1 {
212
- return ( out, rx) ;
213
- }
214
- if let Ok ( evt) = rx. recv ( ) . await {
215
- out. push ( evt) ;
216
- }
217
- }
218
- } ) ;
219
- assert_eq ! ( core. get( 1 ) . await ?, None ) ;
220
- let ( res, rx) = handle. await ;
221
- assert ! ( matches!(
222
- res[ 0 ] ,
223
- Event :: Get ( Get {
224
- index: 1 ,
225
- get_result: _
226
- } )
227
- ) ) ;
228
- // no messages in queue
229
- assert ! ( rx. is_empty( ) ) ;
178
+ async fn shared_core_replication_methods ( ) -> Result < ( ) , ReplicationMethodsError > {
179
+ let main = create_hypercore_with_data ( 10 ) . await ?;
180
+ let clone = create_hypercore_with_data_and_key_pair (
181
+ 0 ,
182
+ PartialKeypair {
183
+ public : main. key_pair . public ,
184
+ secret : None ,
185
+ } ,
186
+ )
187
+ . await ?;
188
+
189
+ let main = SharedCore :: from ( main) ;
190
+ let clone = SharedCore :: from ( clone) ;
191
+
192
+ let index = 6 ;
193
+ let nodes = clone. missing_nodes ( index) . await ?;
194
+ let proof = main
195
+ . create_proof (
196
+ None ,
197
+ Some ( RequestBlock { index, nodes } ) ,
198
+ None ,
199
+ Some ( RequestUpgrade {
200
+ start : 0 ,
201
+ length : 10 ,
202
+ } ) ,
203
+ )
204
+ . await ?
205
+ . unwrap ( ) ;
206
+ assert ! ( clone. verify_and_apply_proof( & proof) . await ?) ;
207
+ let main_info = main. info ( ) . await ;
208
+ let clone_info = clone. info ( ) . await ;
209
+ assert_eq ! ( main_info. byte_length, clone_info. byte_length) ;
210
+ assert_eq ! ( main_info. length, clone_info. length) ;
211
+ assert ! ( main. get( 6 ) . await ?. is_some( ) ) ;
212
+ assert ! ( clone. get( 6 ) . await ?. is_none( ) ) ;
213
+
214
+ // Fetch data for index 6 and verify it is found
215
+ let index = 6 ;
216
+ let nodes = clone. missing_nodes ( index) . await ?;
217
+ let proof = main
218
+ . create_proof ( Some ( RequestBlock { index, nodes } ) , None , None , None )
219
+ . await ?
220
+ . unwrap ( ) ;
221
+ assert ! ( clone. verify_and_apply_proof( & proof) . await ?) ;
230
222
Ok ( ( ) )
231
223
}
232
224
}
0 commit comments