forked from TrueCloudLab/frostfs-node
[#825] event/notaryPreparator: Add unit test for incorrect NR
Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
5d791a4366
commit
1b4f8f7e9f
1 changed files with 215 additions and 3 deletions
|
@ -23,9 +23,13 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
alphaKeys keys.PublicKeys
|
alphaKeys keys.PublicKeys
|
||||||
|
wrongAlphaKeys keys.PublicKeys
|
||||||
|
|
||||||
dummyInvocationScript = append([]byte{byte(opcode.PUSHDATA1), 64}, make([]byte, 64)...)
|
dummyInvocationScript = append([]byte{byte(opcode.PUSHDATA1), 64}, make([]byte, 64)...)
|
||||||
|
wrongDummyInvocationScript = append([]byte{byte(opcode.PUSHDATA1), 64, 1}, make([]byte, 63)...)
|
||||||
|
|
||||||
contractSysCall = make([]byte, 4)
|
contractSysCall = make([]byte, 4)
|
||||||
|
wrongContractSysCall = make([]byte, 4)
|
||||||
|
|
||||||
scriptHash util.Uint160
|
scriptHash util.Uint160
|
||||||
)
|
)
|
||||||
|
@ -36,7 +40,13 @@ func init() {
|
||||||
|
|
||||||
alphaKeys = keys.PublicKeys{pub}
|
alphaKeys = keys.PublicKeys{pub}
|
||||||
|
|
||||||
|
wrongPrivat, _ := keys.NewPrivateKey()
|
||||||
|
wrongPub := wrongPrivat.PublicKey()
|
||||||
|
|
||||||
|
wrongAlphaKeys = keys.PublicKeys{wrongPub}
|
||||||
|
|
||||||
binary.LittleEndian.PutUint32(contractSysCall, interopnames.ToID([]byte(interopnames.SystemContractCall)))
|
binary.LittleEndian.PutUint32(contractSysCall, interopnames.ToID([]byte(interopnames.SystemContractCall)))
|
||||||
|
binary.LittleEndian.PutUint32(wrongContractSysCall, interopnames.ToID([]byte(interopnames.SystemCallbackInvoke)))
|
||||||
|
|
||||||
scriptHash, _ = util.Uint160DecodeStringLE("21fce15191428e9c2f0e8d0329ff6d3dd14882de")
|
scriptHash, _ = util.Uint160DecodeStringLE("21fce15191428e9c2f0e8d0329ff6d3dd14882de")
|
||||||
}
|
}
|
||||||
|
@ -50,6 +60,208 @@ func (b blockCounter) BlockCount() (res uint32, err error) {
|
||||||
return b.epoch, b.err
|
return b.epoch, b.err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPrepare_IncorrectNR(t *testing.T) {
|
||||||
|
type (
|
||||||
|
mTX struct {
|
||||||
|
sigs []transaction.Signer
|
||||||
|
scripts []transaction.Witness
|
||||||
|
attrs []transaction.Attribute
|
||||||
|
}
|
||||||
|
fbTX struct {
|
||||||
|
attrs []transaction.Attribute
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
setIncorrectFields := func(nr payload.P2PNotaryRequest, m mTX, f fbTX) payload.P2PNotaryRequest {
|
||||||
|
if m.sigs != nil {
|
||||||
|
nr.MainTransaction.Signers = m.sigs
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.scripts != nil {
|
||||||
|
nr.MainTransaction.Scripts = m.scripts
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.attrs != nil {
|
||||||
|
nr.MainTransaction.Attributes = m.attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
if f.attrs != nil {
|
||||||
|
nr.FallbackTransaction.Attributes = f.attrs
|
||||||
|
}
|
||||||
|
|
||||||
|
return nr
|
||||||
|
}
|
||||||
|
|
||||||
|
alphaVerificationScript, _ := smartcontract.CreateMultiSigRedeemScript(len(alphaKeys)*2/3+1, alphaKeys)
|
||||||
|
wrongAlphaVerificationScript, _ := smartcontract.CreateMultiSigRedeemScript(len(wrongAlphaKeys)*2/3+1, wrongAlphaKeys)
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
mTX mTX
|
||||||
|
fbTX fbTX
|
||||||
|
expErr error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "incorrect witness amount",
|
||||||
|
mTX: mTX{
|
||||||
|
scripts: []transaction.Witness{{}},
|
||||||
|
},
|
||||||
|
expErr: errUnexpectedWitnessAmount,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "not dummy invocation script",
|
||||||
|
mTX: mTX{
|
||||||
|
scripts: []transaction.Witness{
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
InvocationScript: wrongDummyInvocationScript,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: ErrTXAlreadyHandled,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX signers amount",
|
||||||
|
mTX: mTX{
|
||||||
|
sigs: []transaction.Signer{{}},
|
||||||
|
},
|
||||||
|
expErr: errUnexpectedCosignersAmount,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX Alphabet signer",
|
||||||
|
mTX: mTX{
|
||||||
|
sigs: []transaction.Signer{
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
Account: hash.Hash160(wrongAlphaVerificationScript),
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectAlphabetSigner,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX attribute amount",
|
||||||
|
mTX: mTX{
|
||||||
|
attrs: []transaction.Attribute{{}, {}},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectAttributesAmount,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX attribute",
|
||||||
|
mTX: mTX{
|
||||||
|
attrs: []transaction.Attribute{
|
||||||
|
{
|
||||||
|
Value: &transaction.NotaryAssisted{
|
||||||
|
NKeys: uint8(len(alphaKeys) + 1),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectAttribute,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX proxy witness",
|
||||||
|
mTX: mTX{
|
||||||
|
scripts: []transaction.Witness{
|
||||||
|
{
|
||||||
|
InvocationScript: make([]byte, 1),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
InvocationScript: dummyInvocationScript,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectProxyWitnesses,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX Alphabet witness",
|
||||||
|
mTX: mTX{
|
||||||
|
scripts: []transaction.Witness{
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
VerificationScript: wrongAlphaVerificationScript,
|
||||||
|
InvocationScript: dummyInvocationScript,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectAlphabet,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect main TX Notary witness",
|
||||||
|
mTX: mTX{
|
||||||
|
scripts: []transaction.Witness{
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
VerificationScript: alphaVerificationScript,
|
||||||
|
InvocationScript: dummyInvocationScript,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
InvocationScript: wrongDummyInvocationScript,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectNotaryPlaceholder,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect fb TX attributes amount",
|
||||||
|
fbTX: fbTX{
|
||||||
|
attrs: []transaction.Attribute{{}},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectFBAttributesAmount,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "incorrect fb TX attributes",
|
||||||
|
fbTX: fbTX{
|
||||||
|
attrs: []transaction.Attribute{{}, {}, {}},
|
||||||
|
},
|
||||||
|
expErr: errIncorrectFBAttributes,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "expired fb TX",
|
||||||
|
fbTX: fbTX{
|
||||||
|
[]transaction.Attribute{
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
Type: transaction.NotValidBeforeT,
|
||||||
|
Value: &transaction.NotValidBefore{
|
||||||
|
Height: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: ErrMainTXExpired,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
preparator := notaryPreparator(
|
||||||
|
PreparatorPrm{
|
||||||
|
alphaKeysSource(),
|
||||||
|
blockCounter{100, nil},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
incorrectNR payload.P2PNotaryRequest
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
correctNR := correctNR(nil)
|
||||||
|
incorrectNR = setIncorrectFields(*correctNR, test.mTX, test.fbTX)
|
||||||
|
|
||||||
|
_, err = preparator.Prepare(&incorrectNR)
|
||||||
|
|
||||||
|
require.EqualError(t, err, test.expErr.Error())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPrepare_CorrectNR(t *testing.T) {
|
func TestPrepare_CorrectNR(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
hash util.Uint160
|
hash util.Uint160
|
||||||
|
|
Loading…
Reference in a new issue