github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/utils/unittest/seals.go (about)

     1  package unittest
     2  
     3  import "github.com/onflow/flow-go/model/flow"
     4  
     5  var Seal sealFactory
     6  
     7  type sealFactory struct{}
     8  
     9  func (f *sealFactory) Fixture(opts ...func(*flow.Seal)) *flow.Seal {
    10  	seal := &flow.Seal{
    11  		BlockID:                IdentifierFixture(),
    12  		ResultID:               IdentifierFixture(),
    13  		FinalState:             StateCommitmentFixture(),
    14  		AggregatedApprovalSigs: Seal.AggregatedSignatureFixtures(3), // 3 chunks
    15  	}
    16  	for _, apply := range opts {
    17  		apply(seal)
    18  	}
    19  	return seal
    20  }
    21  
    22  func (f *sealFactory) Fixtures(n int) []*flow.Seal {
    23  	seals := make([]*flow.Seal, 0, n)
    24  	for i := 0; i < n; i++ {
    25  		seal := Seal.Fixture()
    26  		seals = append(seals, seal)
    27  	}
    28  	return seals
    29  }
    30  
    31  func (f *sealFactory) WithResult(result *flow.ExecutionResult) func(*flow.Seal) {
    32  	return func(seal *flow.Seal) {
    33  		finalState, err := result.FinalStateCommitment()
    34  		if err != nil {
    35  			panic("missing first execution result's final state commitment")
    36  		}
    37  		seal.ResultID = result.ID()
    38  		seal.BlockID = result.BlockID
    39  		seal.FinalState = finalState
    40  		seal.AggregatedApprovalSigs = Seal.AggregatedSignatureFixtures(len(result.Chunks))
    41  	}
    42  }
    43  
    44  func (f *sealFactory) WithBlockID(blockID flow.Identifier) func(*flow.Seal) {
    45  	return func(seal *flow.Seal) {
    46  		seal.BlockID = blockID
    47  	}
    48  }
    49  
    50  func (f *sealFactory) WithBlock(block *flow.Header) func(*flow.Seal) {
    51  	return func(seal *flow.Seal) {
    52  		seal.BlockID = block.ID()
    53  	}
    54  }
    55  
    56  func (f *sealFactory) AggregatedSignatureFixtures(number int) []flow.AggregatedSignature {
    57  	sigs := make([]flow.AggregatedSignature, 0, number)
    58  	for ; number > 0; number-- {
    59  		sigs = append(sigs, Seal.AggregatedSignatureFixture())
    60  	}
    61  	return sigs
    62  }
    63  
    64  func (f *sealFactory) AggregatedSignatureFixture() flow.AggregatedSignature {
    65  	return flow.AggregatedSignature{
    66  		VerifierSignatures: SignaturesFixture(7),
    67  		SignerIDs:          IdentifierListFixture(7),
    68  	}
    69  }