github.com/prysmaticlabs/prysm@v1.4.4/spectest/general/phase0/bls/aggregate_test.go (about)

     1  package bls
     2  
     3  import (
     4  	"encoding/hex"
     5  	"path"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/ghodss/yaml"
    10  	"github.com/prysmaticlabs/prysm/shared/bls"
    11  	"github.com/prysmaticlabs/prysm/shared/bls/common"
    12  	"github.com/prysmaticlabs/prysm/shared/testutil"
    13  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    14  	"github.com/prysmaticlabs/prysm/spectest/utils"
    15  )
    16  
    17  func TestAggregate(t *testing.T) {
    18  	t.Run("blst", testAggregate)
    19  }
    20  
    21  func testAggregate(t *testing.T) {
    22  	testFolders, testFolderPath := utils.TestFolders(t, "general", "phase0", "bls/aggregate/small")
    23  
    24  	for _, folder := range testFolders {
    25  		t.Run(folder.Name(), func(t *testing.T) {
    26  			file, err := testutil.BazelFileBytes(path.Join(testFolderPath, folder.Name(), "data.yaml"))
    27  			require.NoError(t, err)
    28  			test := &AggregateTest{}
    29  			require.NoError(t, yaml.Unmarshal(file, test))
    30  			var sigs []common.Signature
    31  			for _, s := range test.Input {
    32  				sigBytes, err := hex.DecodeString(s[2:])
    33  				require.NoError(t, err)
    34  				sig, err := bls.SignatureFromBytes(sigBytes)
    35  				require.NoError(t, err)
    36  				sigs = append(sigs, sig)
    37  			}
    38  			if len(test.Input) == 0 {
    39  				if test.Output != "" {
    40  					t.Fatalf("Output Aggregate is not of zero length:Output %s", test.Output)
    41  				}
    42  				return
    43  			}
    44  			sig := bls.AggregateSignatures(sigs)
    45  			if strings.Contains(folder.Name(), "aggregate_na_pubkeys") {
    46  				if sig != nil {
    47  					t.Errorf("Expected nil signature, received: %v", sig)
    48  				}
    49  				return
    50  			}
    51  			outputBytes, err := hex.DecodeString(test.Output[2:])
    52  			require.NoError(t, err)
    53  			require.DeepEqual(t, outputBytes, sig.Marshal())
    54  		})
    55  	}
    56  }