@@ -179,6 +179,16 @@ fn test_user_pb_from_to() -> anyhow::Result<()> {
179
179
Ok ( ( ) )
180
180
}
181
181
182
+ #[ test]
183
+ fn test_stage_file_pb_from_to ( ) -> anyhow:: Result < ( ) > {
184
+ let test_stage_file = test_stage_file ( ) ;
185
+ let test_stage_file_pb = test_stage_file. to_pb ( ) ?;
186
+ let got = mt:: StageFile :: from_pb ( test_stage_file_pb) ?;
187
+ assert_eq ! ( got, test_stage_file) ;
188
+
189
+ Ok ( ( ) )
190
+ }
191
+
182
192
#[ test]
183
193
fn test_user_incompatible ( ) -> anyhow:: Result < ( ) > {
184
194
{
@@ -200,6 +210,25 @@ fn test_user_incompatible() -> anyhow::Result<()> {
200
210
) ;
201
211
}
202
212
213
+ {
214
+ let stage_file = test_stage_file ( ) ;
215
+ let mut p = stage_file. to_pb ( ) ?;
216
+ p. ver = VER + 1 ;
217
+ p. min_compatible = VER + 1 ;
218
+
219
+ let res = mt:: StageFile :: from_pb ( p) ;
220
+ assert_eq ! (
221
+ Incompatible {
222
+ reason: format!(
223
+ "executable ver={} is smaller than the message min compatible ver: {}" ,
224
+ VER ,
225
+ VER + 1
226
+ )
227
+ } ,
228
+ res. unwrap_err( )
229
+ )
230
+ }
231
+
203
232
{
204
233
let fs_stage_info = test_fs_stage_info ( ) ;
205
234
let mut p = fs_stage_info. to_pb ( ) ?;
@@ -271,7 +300,7 @@ fn test_build_user_pb_buf() -> anyhow::Result<()> {
271
300
272
301
let mut buf = vec ! [ ] ;
273
302
common_protos:: prost:: Message :: encode ( & p, & mut buf) ?;
274
- println ! ( "{:?}" , buf) ;
303
+ println ! ( "user_info: {:?}" , buf) ;
275
304
}
276
305
277
306
// StageFile
@@ -280,7 +309,7 @@ fn test_build_user_pb_buf() -> anyhow::Result<()> {
280
309
let p = stage_file. to_pb ( ) ?;
281
310
let mut buf = vec ! [ ] ;
282
311
common_protos:: prost:: Message :: encode ( & p, & mut buf) ?;
283
- println ! ( "{:?}" , buf) ;
312
+ println ! ( "stage_file: {:?}" , buf) ;
284
313
}
285
314
286
315
// Stage on local file system
@@ -291,7 +320,7 @@ fn test_build_user_pb_buf() -> anyhow::Result<()> {
291
320
292
321
let mut buf = vec ! [ ] ;
293
322
common_protos:: prost:: Message :: encode ( & p, & mut buf) ?;
294
- println ! ( "{:?}" , buf) ;
323
+ println ! ( "fs_stage_info: {:?}" , buf) ;
295
324
}
296
325
297
326
// Stage on S3
@@ -302,7 +331,7 @@ fn test_build_user_pb_buf() -> anyhow::Result<()> {
302
331
303
332
let mut buf = vec ! [ ] ;
304
333
common_protos:: prost:: Message :: encode ( & p, & mut buf) ?;
305
- println ! ( "{:?}" , buf) ;
334
+ println ! ( "s3_stage_info: {:?}" , buf) ;
306
335
}
307
336
308
337
// Stage on GCS, supported in version >=4.
@@ -311,7 +340,7 @@ fn test_build_user_pb_buf() -> anyhow::Result<()> {
311
340
let p = gcs_stage_info. to_pb ( ) ?;
312
341
let mut buf = vec ! [ ] ;
313
342
common_protos:: prost:: Message :: encode ( & p, & mut buf) ?;
314
- println ! ( "{:?}" , buf) ;
343
+ println ! ( "gcs_stage_info: {:?}" , buf) ;
315
344
}
316
345
317
346
Ok ( ( ) )
@@ -390,3 +419,39 @@ fn test_load_old_user() -> anyhow::Result<()> {
390
419
391
420
Ok ( ( ) )
392
421
}
422
+
423
+ #[ test]
424
+ fn test_old_stage_file ( ) -> anyhow:: Result < ( ) > {
425
+ // Encoded data of version 7 of StageFile:
426
+ // Generated with `test_build_user_pb_buf`
427
+ {
428
+ let stage_file_v7 = vec ! [
429
+ 10 , 14 , 47 , 112 , 97 , 116 , 104 , 47 , 116 , 111 , 47 , 115 , 116 , 97 , 103 , 101 , 16 , 233 , 1 ,
430
+ 34 , 23 , 50 , 48 , 50 , 50 , 45 , 48 , 57 , 45 , 49 , 54 , 32 , 48 , 48 , 58 , 48 , 49 , 58 , 48 , 50 , 32 ,
431
+ 85 , 84 , 67 , 42 , 37 , 10 , 12 , 100 , 97 , 116 , 97 , 102 , 117 , 115 , 101 , 108 , 97 , 98 , 115 , 18 ,
432
+ 15 , 100 , 97 , 116 , 97 , 102 , 117 , 115 , 101 , 108 , 97 , 98 , 115 , 46 , 114 , 115 , 160 , 6 , 8 ,
433
+ 168 , 6 , 1 , 160 , 6 , 8 , 168 , 6 , 1 ,
434
+ ] ;
435
+ let p: pb:: StageFile =
436
+ common_protos:: prost:: Message :: decode ( stage_file_v7. as_slice ( ) ) . map_err ( print_err) ?;
437
+ let got = mt:: StageFile :: from_pb ( p) . map_err ( print_err) ?;
438
+
439
+ let dt = NaiveDateTime :: new (
440
+ NaiveDate :: from_ymd ( 2022 , 9 , 16 ) ,
441
+ NaiveTime :: from_hms ( 0 , 1 , 2 ) ,
442
+ ) ;
443
+ let user_id = mt:: UserIdentity :: new ( "datafuselabs" , "datafuselabs.rs" ) ;
444
+ let want = mt:: StageFile {
445
+ path : "/path/to/stage" . to_string ( ) ,
446
+ size : 233 ,
447
+ md5 : None ,
448
+ last_modified : DateTime :: from_utc ( dt, Utc ) ,
449
+ creator : Some ( user_id) ,
450
+ ..Default :: default ( )
451
+ } ;
452
+
453
+ assert_eq ! ( got, want) ;
454
+ }
455
+
456
+ Ok ( ( ) )
457
+ }
0 commit comments