mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-26 19:42:23 +00:00
core: add func to generate RPC test data
newRPCTestChain function generates test chain "testblocks.acc" for RPC tests
This commit is contained in:
parent
189bb3e43b
commit
2b9e63c511
3 changed files with 84 additions and 0 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -17,6 +18,7 @@ import (
|
||||||
"github.com/CityOfZion/neo-go/pkg/io"
|
"github.com/CityOfZion/neo-go/pkg/io"
|
||||||
"github.com/CityOfZion/neo-go/pkg/smartcontract"
|
"github.com/CityOfZion/neo-go/pkg/smartcontract"
|
||||||
"github.com/CityOfZion/neo-go/pkg/util"
|
"github.com/CityOfZion/neo-go/pkg/util"
|
||||||
|
"github.com/CityOfZion/neo-go/pkg/vm/emit"
|
||||||
"github.com/CityOfZion/neo-go/pkg/vm/opcode"
|
"github.com/CityOfZion/neo-go/pkg/vm/opcode"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"go.uber.org/zap/zaptest"
|
"go.uber.org/zap/zaptest"
|
||||||
|
@ -163,3 +165,78 @@ func newDumbBlock() *block.Block {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function generates "../rpc/testdata/testblocks.acc" file which contains data
|
||||||
|
// for RPC unit tests.
|
||||||
|
// To generate new "../rpc/testdata/testblocks.acc", follow the steps:
|
||||||
|
// 1. Rename the function
|
||||||
|
// 2. Add specific test-case into "neo-go/pkg/core/blockchain_test.go"
|
||||||
|
// 3. Run tests with `$ make test`
|
||||||
|
func _(t *testing.T) {
|
||||||
|
bc := newTestChain(t)
|
||||||
|
n := 50
|
||||||
|
blocks := makeBlocks(n)
|
||||||
|
|
||||||
|
for i := 0; i < len(blocks); i++ {
|
||||||
|
if err := bc.AddBlock(blocks[i]); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tx1 := newMinerTX()
|
||||||
|
|
||||||
|
avm, err := ioutil.ReadFile("../rpc/testdata/test_contract.avm")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var props smartcontract.PropertyState
|
||||||
|
script := io.NewBufBinWriter()
|
||||||
|
emit.Bytes(script.BinWriter, []byte("Da contract dat hallos u"))
|
||||||
|
emit.Bytes(script.BinWriter, []byte("joe@example.com"))
|
||||||
|
emit.Bytes(script.BinWriter, []byte("Random Guy"))
|
||||||
|
emit.Bytes(script.BinWriter, []byte("0.99"))
|
||||||
|
emit.Bytes(script.BinWriter, []byte("Helloer"))
|
||||||
|
props |= smartcontract.HasStorage
|
||||||
|
emit.Int(script.BinWriter, int64(props))
|
||||||
|
emit.Int(script.BinWriter, int64(5))
|
||||||
|
params := make([]byte, 1)
|
||||||
|
params[0] = byte(7)
|
||||||
|
emit.Bytes(script.BinWriter, params)
|
||||||
|
emit.Bytes(script.BinWriter, avm)
|
||||||
|
emit.Syscall(script.BinWriter, "Neo.Contract.Create")
|
||||||
|
txScript := script.Bytes()
|
||||||
|
|
||||||
|
tx2 := transaction.NewInvocationTX(txScript, util.Fixed8FromFloat(100))
|
||||||
|
|
||||||
|
block := newBlock(uint32(n+1), tx1, tx2)
|
||||||
|
if err := bc.AddBlock(block); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
outStream, err := os.Create("../rpc/testdata/testblocks.acc")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer outStream.Close()
|
||||||
|
|
||||||
|
writer := io.NewBinWriterFromIO(outStream)
|
||||||
|
|
||||||
|
count := bc.BlockHeight() + 1
|
||||||
|
writer.WriteU32LE(count - 1)
|
||||||
|
|
||||||
|
for i := 1; i < int(count); i++ {
|
||||||
|
bh := bc.GetHeaderHash(i)
|
||||||
|
b, err := bc.GetBlock(bh)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
buf := io.NewBufBinWriter()
|
||||||
|
b.EncodeBinary(buf.BinWriter)
|
||||||
|
bytes := buf.Bytes()
|
||||||
|
writer.WriteBytes(bytes)
|
||||||
|
if writer.Err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -189,6 +189,12 @@ func initServerWithInMemoryChain(t *testing.T) (*core.Blockchain, http.HandlerFu
|
||||||
|
|
||||||
go chain.Run()
|
go chain.Run()
|
||||||
|
|
||||||
|
// File "./testdata/testblocks.acc" was generated by function core._
|
||||||
|
// ("neo-go/pkg/core/helper_test.go").
|
||||||
|
// To generate new "./testdata/testblocks.acc", follow the steps:
|
||||||
|
// 1. Rename the function
|
||||||
|
// 2. Add specific test-case into "neo-go/pkg/core/blockchain_test.go"
|
||||||
|
// 3. Run tests with `$ make test`
|
||||||
f, err := os.Open("testdata/testblocks.acc")
|
f, err := os.Open("testdata/testblocks.acc")
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
br := io.NewBinReaderFromIO(f)
|
br := io.NewBinReaderFromIO(f)
|
||||||
|
|
1
pkg/rpc/testdata/test_contract.avm
vendored
Executable file
1
pkg/rpc/testdata/test_contract.avm
vendored
Executable file
|
@ -0,0 +1 @@
|
||||||
|
QÅk
Hello, world!hNeo.Runtime.Logaluf
|
Loading…
Reference in a new issue