forked from TrueCloudLab/neoneo-go
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
|
package context
|
||
|
|
||
|
import (
|
||
|
"encoding/hex"
|
||
|
"encoding/json"
|
||
|
"io"
|
||
|
"math/rand"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
|
||
|
|
||
|
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestContextItem_AddSignature(t *testing.T) {
|
||
|
item := &Item{Signatures: make(map[string][]byte)}
|
||
|
|
||
|
priv1, err := keys.NewPrivateKey()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
pub1 := priv1.PublicKey()
|
||
|
sig1 := []byte{1, 2, 3}
|
||
|
item.AddSignature(pub1, sig1)
|
||
|
require.Equal(t, sig1, item.GetSignature(pub1))
|
||
|
|
||
|
priv2, err := keys.NewPrivateKey()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
pub2 := priv2.PublicKey()
|
||
|
sig2 := []byte{5, 6, 7}
|
||
|
item.AddSignature(pub2, sig2)
|
||
|
require.Equal(t, sig2, item.GetSignature(pub2))
|
||
|
require.Equal(t, sig1, item.GetSignature(pub1))
|
||
|
}
|
||
|
|
||
|
func TestContextItem_MarshalJSON(t *testing.T) {
|
||
|
priv1, err := keys.NewPrivateKey()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
priv2, err := keys.NewPrivateKey()
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
expected := &Item{
|
||
|
Script: util.Uint160{1, 2, 3},
|
||
|
Parameters: []smartcontract.Parameter{{
|
||
|
Type: smartcontract.SignatureType,
|
||
|
Value: getRandomSlice(t, 64),
|
||
|
}},
|
||
|
Signatures: map[string][]byte{
|
||
|
hex.EncodeToString(priv1.PublicKey().Bytes()): getRandomSlice(t, 64),
|
||
|
hex.EncodeToString(priv2.PublicKey().Bytes()): getRandomSlice(t, 64),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
data, err := json.Marshal(expected)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
actual := new(Item)
|
||
|
require.NoError(t, json.Unmarshal(data, actual))
|
||
|
assert.Equal(t, expected, actual)
|
||
|
}
|
||
|
|
||
|
func getRandomSlice(t *testing.T, n int) []byte {
|
||
|
src := rand.NewSource(time.Now().UnixNano())
|
||
|
r := rand.New(src)
|
||
|
data := make([]byte, n)
|
||
|
_, err := io.ReadFull(r, data)
|
||
|
require.NoError(t, err)
|
||
|
return data
|
||
|
}
|