@@ -286,9 +286,10 @@ func TestExtractPayloadsFromExecutionState(t *testing.T) {
286
286
require .NoError (t , err )
287
287
288
288
// Verify exported payloads.
289
- payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
289
+ partialState , payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
290
290
require .NoError (t , err )
291
291
require .Equal (t , len (keysValues ), len (payloadsFromFile ))
292
+ require .False (t , partialState )
292
293
293
294
for _ , payloadFromFile := range payloadsFromFile {
294
295
k , err := payloadFromFile .Key ()
@@ -392,9 +393,10 @@ func TestExtractPayloadsFromExecutionState(t *testing.T) {
392
393
require .NoError (t , err )
393
394
394
395
// Verify exported payloads.
395
- payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
396
+ partialState , payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
396
397
require .NoError (t , err )
397
398
require .Equal (t , len (selectedKeysValues ), len (payloadsFromFile ))
399
+ require .True (t , partialState )
398
400
399
401
for _ , payloadFromFile := range payloadsFromFile {
400
402
k , err := payloadFromFile .Key ()
@@ -441,6 +443,7 @@ func TestExtractStateFromPayloads(t *testing.T) {
441
443
inputPayloadFileName ,
442
444
payloads ,
443
445
nil ,
446
+ false ,
444
447
)
445
448
require .NoError (t , err )
446
449
require .Equal (t , len (payloads ), numOfPayloadWritten )
@@ -511,6 +514,7 @@ func TestExtractStateFromPayloads(t *testing.T) {
511
514
inputPayloadFileName ,
512
515
payloads ,
513
516
nil ,
517
+ false ,
514
518
)
515
519
require .NoError (t , err )
516
520
require .Equal (t , len (payloads ), numOfPayloadWritten )
@@ -531,9 +535,79 @@ func TestExtractStateFromPayloads(t *testing.T) {
531
535
require .NoError (t , err )
532
536
533
537
// Verify exported payloads.
534
- payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
538
+ partialState , payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
539
+ require .NoError (t , err )
540
+ require .Equal (t , len (keysValues ), len (payloadsFromFile ))
541
+ require .False (t , partialState )
542
+
543
+ for _ , payloadFromFile := range payloadsFromFile {
544
+ k , err := payloadFromFile .Key ()
545
+ require .NoError (t , err )
546
+
547
+ kv , exist := keysValues [k .String ()]
548
+ require .True (t , exist )
549
+
550
+ require .Equal (t , kv .value , payloadFromFile .Value ())
551
+ }
552
+ })
553
+ })
554
+
555
+ t .Run ("input is partial state" , func (t * testing.T ) {
556
+ withDirs (t , func (_ , execdir , outdir string ) {
557
+ size := 10
558
+
559
+ inputPayloadFileName := filepath .Join (execdir , payloadFileName )
560
+ outputPayloadFileName := filepath .Join (outdir , "selected.payload" )
561
+
562
+ // Generate some data
563
+ keysValues := make (map [string ]keyPair )
564
+ var payloads []* ledger.Payload
565
+
566
+ for i := 0 ; i < size ; i ++ {
567
+ keys , values := getSampleKeyValues (i )
568
+
569
+ for j , key := range keys {
570
+ keysValues [key .String ()] = keyPair {
571
+ key : key ,
572
+ value : values [j ],
573
+ }
574
+
575
+ payloads = append (payloads , ledger .NewPayload (key , values [j ]))
576
+ }
577
+ }
578
+
579
+ // Create input payload file that represents partial state
580
+ numOfPayloadWritten , err := util .CreatePayloadFile (
581
+ zerolog .Nop (),
582
+ inputPayloadFileName ,
583
+ payloads ,
584
+ nil ,
585
+ true ,
586
+ )
587
+ require .NoError (t , err )
588
+ require .Equal (t , len (payloads ), numOfPayloadWritten )
589
+
590
+ // Since input payload file is partial state, --allow-partial-state-from-payload-file must be specified.
591
+ Cmd .SetArgs ([]string {
592
+ "--execution-state-dir" , execdir ,
593
+ "--output-dir" , outdir ,
594
+ "--no-migration" ,
595
+ "--no-report" ,
596
+ "--state-commitment" , "" ,
597
+ "--input-payload-filename" , inputPayloadFileName ,
598
+ "--output-payload-filename" , outputPayloadFileName ,
599
+ "--extract-payloads-by-address" , "" ,
600
+ "--allow-partial-state-from-payload-file" ,
601
+ "--chain" , flow .Emulator .Chain ().String ()})
602
+
603
+ err = Cmd .Execute ()
604
+ require .NoError (t , err )
605
+
606
+ // Verify exported payloads.
607
+ partialState , payloadsFromFile , err := util .ReadPayloadFile (zerolog .Nop (), outputPayloadFileName )
535
608
require .NoError (t , err )
536
609
require .Equal (t , len (keysValues ), len (payloadsFromFile ))
610
+ require .True (t , partialState )
537
611
538
612
for _ , payloadFromFile := range payloadsFromFile {
539
613
k , err := payloadFromFile .Key ()
0 commit comments