github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/module/signature/type_encoder_test.go (about) 1 package signature_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 "github.com/onflow/flow-go/model/encoding" 9 "github.com/onflow/flow-go/module/signature" 10 "github.com/onflow/flow-go/utils/unittest" 11 ) 12 13 func TestEncodeDecodeStakingSig(t *testing.T) { 14 sig := unittest.SignatureFixture() 15 encoded := signature.EncodeSingleSig(encoding.SigTypeStaking, sig) 16 decodedType, decodedSig, err := signature.DecodeSingleSig(encoded) 17 require.NoError(t, err) 18 require.Equal(t, encoding.SigTypeStaking, decodedType) 19 require.Equal(t, sig, decodedSig) 20 } 21 22 func TestEncodeDecodeRandomBeaconSig(t *testing.T) { 23 sig := unittest.SignatureFixture() 24 encoded := signature.EncodeSingleSig(encoding.SigTypeRandomBeacon, sig) 25 decodedType, decodedSig, err := signature.DecodeSingleSig(encoded) 26 require.NoError(t, err) 27 require.Equal(t, encoding.SigTypeRandomBeacon, decodedType) 28 require.Equal(t, sig, decodedSig) 29 } 30 31 // encode with invalid sig type, then decode will fail 32 func TestEncodeDecodeInvalidSig(t *testing.T) { 33 sig := unittest.SignatureFixture() 34 35 for i := int(encoding.SigTypeRandomBeacon) + 1; i < int(encoding.SigTypeRandomBeacon)+5; i++ { 36 sigType := encoding.SigType(i) 37 encoded := signature.EncodeSingleSig(sigType, sig) 38 _, _, err := signature.DecodeSingleSig(encoded) 39 require.Error(t, err) 40 } 41 } 42 43 func TestDecodeEmptySig(t *testing.T) { 44 _, _, err := signature.DecodeSingleSig([]byte{}) 45 require.Error(t, err) 46 } 47 48 // encode two different sigs wth the same type, the encoded sig should be different 49 func TestEncodeTwoSigsDifferent(t *testing.T) { 50 sigs := unittest.SignaturesFixture(2) 51 sig1, sig2 := sigs[0], sigs[1] 52 encodedSig1 := signature.EncodeSingleSig(encoding.SigTypeStaking, sig1) 53 encodedSig2 := signature.EncodeSingleSig(encoding.SigTypeStaking, sig2) 54 require.NotEqual(t, encodedSig1, encodedSig2) 55 } 56 57 // encode the same sig with the different type, the encoded sig should be different 58 func TestEncodeSameSigWithDifferentTypeShouldBeDifferen(t *testing.T) { 59 sig := unittest.SignatureFixture() 60 encodedAsStaking := signature.EncodeSingleSig(encoding.SigTypeStaking, sig) 61 encodedAsRandomBeacon := signature.EncodeSingleSig(encoding.SigTypeRandomBeacon, sig) 62 require.NotEqual(t, encodedAsStaking, encodedAsRandomBeacon) 63 }