Merge pull request #2147 from nspcc-dev/drop-go-1.14
Drop Go 1.14, use 1.17
This commit is contained in:
commit
734eef3290
26 changed files with 168 additions and 373 deletions
|
@ -3,11 +3,6 @@ orbs:
|
||||||
codecov: codecov/codecov@1.0.5
|
codecov: codecov/codecov@1.0.5
|
||||||
|
|
||||||
executors:
|
executors:
|
||||||
go1_14:
|
|
||||||
docker:
|
|
||||||
- image: circleci/golang:1.14
|
|
||||||
environment:
|
|
||||||
GO111MODULE: "on"
|
|
||||||
go1_15:
|
go1_15:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/golang:1.15
|
- image: circleci/golang:1.15
|
||||||
|
@ -18,6 +13,9 @@ executors:
|
||||||
- image: circleci/golang:1.16
|
- image: circleci/golang:1.16
|
||||||
environment:
|
environment:
|
||||||
GO111MODULE: "on"
|
GO111MODULE: "on"
|
||||||
|
go1_17:
|
||||||
|
docker:
|
||||||
|
- image: circleci/golang:1.17
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
gomod:
|
gomod:
|
||||||
|
@ -34,7 +32,7 @@ commands:
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
||||||
executor: go1_16
|
executor: go1_17
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- gomod
|
- gomod
|
||||||
|
@ -44,15 +42,6 @@ jobs:
|
||||||
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.40.0
|
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.40.0
|
||||||
make lint
|
make lint
|
||||||
|
|
||||||
test_1_14:
|
|
||||||
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
|
||||||
executor: go1_14
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- run: git submodule sync
|
|
||||||
- run: git submodule update --init
|
|
||||||
- gomod
|
|
||||||
- run: go test -v -race ./...
|
|
||||||
test_1_15:
|
test_1_15:
|
||||||
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
||||||
executor: go1_15
|
executor: go1_15
|
||||||
|
@ -63,9 +52,19 @@ jobs:
|
||||||
- gomod
|
- gomod
|
||||||
- run: go test -v -race ./...
|
- run: go test -v -race ./...
|
||||||
|
|
||||||
test_cover:
|
test_1_16:
|
||||||
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
||||||
executor: go1_16
|
executor: go1_16
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: git submodule sync
|
||||||
|
- run: git submodule update --init
|
||||||
|
- gomod
|
||||||
|
- run: go test -v -race ./...
|
||||||
|
|
||||||
|
test_cover:
|
||||||
|
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
||||||
|
executor: go1_17
|
||||||
environment:
|
environment:
|
||||||
CGO_ENABLED: 0
|
CGO_ENABLED: 0
|
||||||
steps:
|
steps:
|
||||||
|
@ -79,7 +78,7 @@ jobs:
|
||||||
|
|
||||||
build_cli:
|
build_cli:
|
||||||
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
||||||
executor: go1_16
|
executor: go1_17
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- gomod
|
- gomod
|
||||||
|
@ -90,7 +89,7 @@ jobs:
|
||||||
|
|
||||||
build_image:
|
build_image:
|
||||||
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
working_directory: /go/src/github.com/nspcc-dev/neo-go
|
||||||
executor: go1_16
|
executor: go1_17
|
||||||
docker:
|
docker:
|
||||||
- image: golang:1-alpine
|
- image: golang:1-alpine
|
||||||
steps:
|
steps:
|
||||||
|
@ -118,11 +117,11 @@ workflows:
|
||||||
filters:
|
filters:
|
||||||
tags:
|
tags:
|
||||||
only: v/[0-9]+\.[0-9]+\.[0-9]+/
|
only: v/[0-9]+\.[0-9]+\.[0-9]+/
|
||||||
- test_1_14:
|
- test_1_15:
|
||||||
filters:
|
filters:
|
||||||
tags:
|
tags:
|
||||||
only: v/[0-9]+\.[0-9]+\.[0-9]+/
|
only: v/[0-9]+\.[0-9]+\.[0-9]+/
|
||||||
- test_1_15:
|
- test_1_16:
|
||||||
filters:
|
filters:
|
||||||
tags:
|
tags:
|
||||||
only: v/[0-9]+\.[0-9]+\.[0-9]+/
|
only: v/[0-9]+\.[0-9]+\.[0-9]+/
|
||||||
|
|
4
.github/workflows/publish_to_dockerhub.yml
vendored
4
.github/workflows/publish_to_dockerhub.yml
vendored
|
@ -57,7 +57,7 @@ jobs:
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.17
|
||||||
|
|
||||||
- name: Restore go modules from cache
|
- name: Restore go modules from cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
|
@ -94,7 +94,7 @@ jobs:
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.17
|
||||||
|
|
||||||
- name: Restore go modules from cache
|
- name: Restore go modules from cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
|
|
8
.github/workflows/run_tests.yml
vendored
8
.github/workflows/run_tests.yml
vendored
|
@ -44,7 +44,7 @@ jobs:
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.17
|
||||||
|
|
||||||
- name: Restore Go modules from cache
|
- name: Restore Go modules from cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
|
@ -70,7 +70,7 @@ jobs:
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-18.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
go_versions: [ '1.14', '1.15', '1.16' ]
|
go_versions: [ '1.15', '1.16' ]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@ -111,7 +111,7 @@ jobs:
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.17
|
||||||
|
|
||||||
- name: Restore Go modules from cache
|
- name: Restore Go modules from cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
|
@ -138,7 +138,7 @@ jobs:
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.16
|
go-version: 1.17
|
||||||
|
|
||||||
- name: Restore Go modules from cache
|
- name: Restore Go modules from cache
|
||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
language: go
|
language: go
|
||||||
go:
|
go:
|
||||||
- 1.14.x
|
- 1.15.x
|
||||||
env:
|
env:
|
||||||
- GO111MODULE=on
|
- GO111MODULE=on
|
||||||
install:
|
install:
|
||||||
|
|
|
@ -48,7 +48,7 @@ NeoGo, `:latest` points to the latest release) or build yourself.
|
||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
To build NeoGo you need Go 1.14+ and `make`:
|
To build NeoGo you need Go 1.15+ and `make`:
|
||||||
|
|
||||||
```
|
```
|
||||||
make build
|
make build
|
||||||
|
|
|
@ -28,6 +28,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCalcHash(t *testing.T) {
|
func TestCalcHash(t *testing.T) {
|
||||||
|
tmpDir := t.TempDir()
|
||||||
e := newExecutor(t, false)
|
e := newExecutor(t, false)
|
||||||
|
|
||||||
nefPath := "./testdata/verify.nef"
|
nefPath := "./testdata/verify.nef"
|
||||||
|
@ -58,13 +59,9 @@ func TestCalcHash(t *testing.T) {
|
||||||
"--in", "./testdata/verify.nef123", "--manifest", manifestPath)...)
|
"--in", "./testdata/verify.nef123", "--manifest", manifestPath)...)
|
||||||
})
|
})
|
||||||
t.Run("invalid file", func(t *testing.T) {
|
t.Run("invalid file", func(t *testing.T) {
|
||||||
p, err := ioutil.TempFile("", "neogo.calchash.verify.nef")
|
p := path.Join(tmpDir, "neogo.calchash.verify.nef")
|
||||||
require.NoError(t, err)
|
require.NoError(t, ioutil.WriteFile(p, src[:4], os.ModePerm))
|
||||||
t.Cleanup(func() {
|
e.RunWithError(t, append(cmd, "--sender", sender.StringLE(), "--in", p, "--manifest", manifestPath)...)
|
||||||
os.Remove(p.Name())
|
|
||||||
})
|
|
||||||
require.NoError(t, ioutil.WriteFile(p.Name(), src[:4], os.ModePerm))
|
|
||||||
e.RunWithError(t, append(cmd, "--sender", sender.StringLE(), "--in", p.Name(), "--manifest", manifestPath)...)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
cmd = append(cmd, "--in", nefPath, "--manifest", manifestPath)
|
cmd = append(cmd, "--in", nefPath, "--manifest", manifestPath)
|
||||||
|
@ -84,12 +81,7 @@ func TestCalcHash(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestContractInitAndCompile(t *testing.T) {
|
func TestContractInitAndCompile(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.inittest")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
e := newExecutor(t, false)
|
e := newExecutor(t, false)
|
||||||
|
|
||||||
t.Run("no path is provided", func(t *testing.T) {
|
t.Run("no path is provided", func(t *testing.T) {
|
||||||
|
@ -148,12 +140,7 @@ func TestDeployBigContract(t *testing.T) {
|
||||||
|
|
||||||
// For proper nef generation.
|
// For proper nef generation.
|
||||||
config.Version = "0.90.0-test"
|
config.Version = "0.90.0-test"
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.deployfail")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
nefName := path.Join(tmpDir, "deploy.nef")
|
nefName := path.Join(tmpDir, "deploy.nef")
|
||||||
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
||||||
|
@ -174,12 +161,7 @@ func TestContractDeployWithData(t *testing.T) {
|
||||||
|
|
||||||
// For proper nef generation.
|
// For proper nef generation.
|
||||||
config.Version = "0.90.0-test"
|
config.Version = "0.90.0-test"
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.deployfail")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
nefName := path.Join(tmpDir, "deploy.nef")
|
nefName := path.Join(tmpDir, "deploy.nef")
|
||||||
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
||||||
|
@ -232,12 +214,7 @@ func TestContractManifestGroups(t *testing.T) {
|
||||||
|
|
||||||
// For proper nef generation.
|
// For proper nef generation.
|
||||||
config.Version = "0.90.0-test"
|
config.Version = "0.90.0-test"
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.deployfail")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
w, err := wallet.NewWalletFromFile(testWalletPath)
|
w, err := wallet.NewWalletFromFile(testWalletPath)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -273,11 +250,7 @@ func deployVerifyContract(t *testing.T, e *executor) util.Uint160 {
|
||||||
}
|
}
|
||||||
|
|
||||||
func deployContract(t *testing.T, e *executor, inPath, configPath, wallet, address, pass string) util.Uint160 {
|
func deployContract(t *testing.T, e *executor, inPath, configPath, wallet, address, pass string) util.Uint160 {
|
||||||
tmpDir, err := ioutil.TempDir(os.TempDir(), "neogo.test.deploycontract*")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
nefName := path.Join(tmpDir, "contract.nef")
|
nefName := path.Join(tmpDir, "contract.nef")
|
||||||
manifestName := path.Join(tmpDir, "contract.manifest.json")
|
manifestName := path.Join(tmpDir, "contract.manifest.json")
|
||||||
e.Run(t, "neo-go", "contract", "compile",
|
e.Run(t, "neo-go", "contract", "compile",
|
||||||
|
@ -303,12 +276,7 @@ func TestComlileAndInvokeFunction(t *testing.T) {
|
||||||
|
|
||||||
// For proper nef generation.
|
// For proper nef generation.
|
||||||
config.Version = "0.90.0-test"
|
config.Version = "0.90.0-test"
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.compileandinvoke")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
nefName := path.Join(tmpDir, "deploy.nef")
|
nefName := path.Join(tmpDir, "deploy.nef")
|
||||||
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
||||||
|
@ -556,12 +524,7 @@ func TestContractInspect(t *testing.T) {
|
||||||
// For proper nef generation.
|
// For proper nef generation.
|
||||||
config.Version = "0.90.0-test"
|
config.Version = "0.90.0-test"
|
||||||
const srcPath = "testdata/deploy/main.go"
|
const srcPath = "testdata/deploy/main.go"
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.contract.inspect")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
nefName := path.Join(tmpDir, "deploy.nef")
|
nefName := path.Join(tmpDir, "deploy.nef")
|
||||||
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
manifestName := path.Join(tmpDir, "deploy.manifest.json")
|
||||||
|
@ -588,6 +551,7 @@ func TestContractInspect(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCompileExamples(t *testing.T) {
|
func TestCompileExamples(t *testing.T) {
|
||||||
|
tmpDir := t.TempDir()
|
||||||
const examplePath = "../examples"
|
const examplePath = "../examples"
|
||||||
infos, err := ioutil.ReadDir(examplePath)
|
infos, err := ioutil.ReadDir(examplePath)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -608,21 +572,15 @@ func TestCompileExamples(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.False(t, len(infos) == 0, "detected smart contract folder with no contract in it")
|
require.False(t, len(infos) == 0, "detected smart contract folder with no contract in it")
|
||||||
|
|
||||||
outF, err := ioutil.TempFile("", info.Name()+".nef")
|
outF := path.Join(tmpDir, info.Name()+".nef")
|
||||||
require.NoError(t, err)
|
manifestF := path.Join(tmpDir, info.Name()+".manifest.json")
|
||||||
manifestF, err := ioutil.TempFile("", info.Name()+".manifest.json")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.Remove(outF.Name())
|
|
||||||
os.Remove(manifestF.Name())
|
|
||||||
})
|
|
||||||
|
|
||||||
cfgName := filterFilename(infos, ".yml")
|
cfgName := filterFilename(infos, ".yml")
|
||||||
opts := []string{
|
opts := []string{
|
||||||
"neo-go", "contract", "compile",
|
"neo-go", "contract", "compile",
|
||||||
"--in", path.Join(examplePath, info.Name()),
|
"--in", path.Join(examplePath, info.Name()),
|
||||||
"--out", outF.Name(),
|
"--out", outF,
|
||||||
"--manifest", manifestF.Name(),
|
"--manifest", manifestF,
|
||||||
"--config", path.Join(examplePath, info.Name(), cfgName),
|
"--config", path.Join(examplePath, info.Name(), cfgName),
|
||||||
}
|
}
|
||||||
e.Run(t, opts...)
|
e.Run(t, opts...)
|
||||||
|
@ -632,18 +590,12 @@ func TestCompileExamples(t *testing.T) {
|
||||||
t.Run("invalid events in manifest", func(t *testing.T) {
|
t.Run("invalid events in manifest", func(t *testing.T) {
|
||||||
const dir = "./testdata/"
|
const dir = "./testdata/"
|
||||||
for _, name := range []string{"invalid1", "invalid2", "invalid3"} {
|
for _, name := range []string{"invalid1", "invalid2", "invalid3"} {
|
||||||
outF, err := ioutil.TempFile("", name+".nef")
|
outF := path.Join(tmpDir, name+".nef")
|
||||||
require.NoError(t, err)
|
manifestF := path.Join(tmpDir, name+".manifest.json")
|
||||||
manifestF, err := ioutil.TempFile("", name+".manifest.json")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.Remove(outF.Name())
|
|
||||||
os.Remove(manifestF.Name())
|
|
||||||
})
|
|
||||||
e.RunWithError(t, "neo-go", "contract", "compile",
|
e.RunWithError(t, "neo-go", "contract", "compile",
|
||||||
"--in", path.Join(dir, name),
|
"--in", path.Join(dir, name),
|
||||||
"--out", outF.Name(),
|
"--out", outF,
|
||||||
"--manifest", manifestF.Name(),
|
"--manifest", manifestF,
|
||||||
"--config", path.Join(dir, name, "invalid.yml"),
|
"--config", path.Join(dir, name, "invalid.yml"),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestDBRestore(t *testing.T) {
|
func TestDBRestore(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.restoretest")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
chainPath := path.Join(tmpDir, "neogotestchain")
|
chainPath := path.Join(tmpDir, "neogotestchain")
|
||||||
cfg, err := config.LoadFile("../config/protocol.unit_testnet.yml")
|
cfg, err := config.LoadFile("../config/protocol.unit_testnet.yml")
|
||||||
|
|
|
@ -2,7 +2,6 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"io/ioutil"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
@ -28,13 +27,9 @@ func TestSignMultisigTx(t *testing.T) {
|
||||||
multisigAddr := address.Uint160ToString(multisigHash)
|
multisigAddr := address.Uint160ToString(multisigHash)
|
||||||
|
|
||||||
// Create 2 wallets participating in multisig.
|
// Create 2 wallets participating in multisig.
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.wallettest")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
wallet1Path := path.Join(tmpDir, "multiWallet1.json")
|
wallet1Path := path.Join(tmpDir, "multiWallet1.json")
|
||||||
wallet2Path := path.Join(tmpDir, "multiWallet2.json")
|
wallet2Path := path.Join(tmpDir, "multiWallet2.json")
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
addAccount := func(w string, wif string) {
|
addAccount := func(w string, wif string) {
|
||||||
e.Run(t, "neo-go", "wallet", "init", "--wallet", w)
|
e.Run(t, "neo-go", "wallet", "init", "--wallet", w)
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/big"
|
"math/big"
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -31,10 +30,8 @@ const (
|
||||||
func TestNEP11Import(t *testing.T) {
|
func TestNEP11Import(t *testing.T) {
|
||||||
e := newExecutor(t, true)
|
e := newExecutor(t, true)
|
||||||
|
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.nep11import")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
walletPath := path.Join(tmpDir, "walletForImport.json")
|
walletPath := path.Join(tmpDir, "walletForImport.json")
|
||||||
t.Cleanup(func() { os.RemoveAll(tmpDir) })
|
|
||||||
|
|
||||||
// deploy NFT NeoNameService contract
|
// deploy NFT NeoNameService contract
|
||||||
nnsContractHash := deployNNSContract(t, e)
|
nnsContractHash := deployNNSContract(t, e)
|
||||||
|
@ -93,12 +90,7 @@ func TestNEP11Import(t *testing.T) {
|
||||||
|
|
||||||
func TestNEP11_OwnerOf_BalanceOf_Transfer(t *testing.T) {
|
func TestNEP11_OwnerOf_BalanceOf_Transfer(t *testing.T) {
|
||||||
e := newExecutor(t, true)
|
e := newExecutor(t, true)
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir(os.TempDir(), "neogo.test.nftwallet*")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
// copy wallet to temp dir in order not to overwrite the original file
|
// copy wallet to temp dir in order not to overwrite the original file
|
||||||
bytesRead, err := ioutil.ReadFile(nftOwnerWallet)
|
bytesRead, err := ioutil.ReadFile(nftOwnerWallet)
|
||||||
|
|
|
@ -2,9 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -260,10 +258,7 @@ func TestNEP17MultiTransfer(t *testing.T) {
|
||||||
|
|
||||||
func TestNEP17ImportToken(t *testing.T) {
|
func TestNEP17ImportToken(t *testing.T) {
|
||||||
e := newExecutor(t, true)
|
e := newExecutor(t, true)
|
||||||
|
tmpDir := t.TempDir()
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.nep17import")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() { os.RemoveAll(tmpDir) })
|
|
||||||
walletPath := path.Join(tmpDir, "walletForImport.json")
|
walletPath := path.Join(tmpDir, "walletForImport.json")
|
||||||
|
|
||||||
neoContractHash, err := e.Chain.GetNativeContractScriptHash(nativenames.Neo)
|
neoContractHash, err := e.Chain.GetNativeContractScriptHash(nativenames.Neo)
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -10,12 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetPath(t *testing.T) {
|
func TestGetPath(t *testing.T) {
|
||||||
testPath, err := ioutil.TempDir("./", "")
|
testPath := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
err := os.RemoveAll(testPath)
|
|
||||||
require.NoError(t, err)
|
|
||||||
})
|
|
||||||
actual, err := getPath(testPath, 123)
|
actual, err := getPath(testPath, 123)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, path.Join(testPath, "/BlockStorage_100000/dump-block-1000.json"), actual)
|
require.Equal(t, path.Join(testPath, "/BlockStorage_100000/dump-block-1000.json"), actual)
|
||||||
|
|
|
@ -2,8 +2,8 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/config"
|
"github.com/nspcc-dev/neo-go/pkg/config"
|
||||||
|
@ -16,6 +16,17 @@ import (
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// serverTestWD is the default working directory for server tests.
|
||||||
|
var serverTestWD string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
var err error
|
||||||
|
serverTestWD, err = os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
panic("can't get current working directory")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetConfigFromContext(t *testing.T) {
|
func TestGetConfigFromContext(t *testing.T) {
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
set.String("config-path", "../../config", "")
|
set.String("config-path", "../../config", "")
|
||||||
|
@ -27,17 +38,14 @@ func TestGetConfigFromContext(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleLoggingParams(t *testing.T) {
|
func TestHandleLoggingParams(t *testing.T) {
|
||||||
testLog, err := ioutil.TempFile("./", "*.log")
|
d := t.TempDir()
|
||||||
require.NoError(t, err)
|
testLog := path.Join(d, "file.log")
|
||||||
t.Cleanup(func() {
|
|
||||||
require.NoError(t, os.Remove(testLog.Name()))
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("default", func(t *testing.T) {
|
t.Run("default", func(t *testing.T) {
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
||||||
cfg := config.ApplicationConfiguration{
|
cfg := config.ApplicationConfiguration{
|
||||||
LogPath: testLog.Name(),
|
LogPath: testLog,
|
||||||
}
|
}
|
||||||
logger, err := handleLoggingParams(ctx, cfg)
|
logger, err := handleLoggingParams(ctx, cfg)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -50,7 +58,7 @@ func TestHandleLoggingParams(t *testing.T) {
|
||||||
set.Bool("debug", true, "")
|
set.Bool("debug", true, "")
|
||||||
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
||||||
cfg := config.ApplicationConfiguration{
|
cfg := config.ApplicationConfiguration{
|
||||||
LogPath: testLog.Name(),
|
LogPath: testLog,
|
||||||
}
|
}
|
||||||
logger, err := handleLoggingParams(ctx, cfg)
|
logger, err := handleLoggingParams(ctx, cfg)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -60,18 +68,13 @@ func TestHandleLoggingParams(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInitBCWithMetrics(t *testing.T) {
|
func TestInitBCWithMetrics(t *testing.T) {
|
||||||
d, err := ioutil.TempDir("./", "")
|
d := t.TempDir()
|
||||||
|
err := os.Chdir(d)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
err = os.Chdir(d)
|
t.Cleanup(func() { require.NoError(t, os.Chdir(serverTestWD)) })
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
err = os.Chdir("..")
|
|
||||||
require.NoError(t, err)
|
|
||||||
os.RemoveAll(d)
|
|
||||||
})
|
|
||||||
|
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
set.String("config-path", "../../../config", "")
|
set.String("config-path", path.Join(serverTestWD, "../../config"), "")
|
||||||
set.Bool("testnet", true, "")
|
set.Bool("testnet", true, "")
|
||||||
set.Bool("debug", true, "")
|
set.Bool("debug", true, "")
|
||||||
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
ctx := cli.NewContext(cli.NewApp(), set, nil)
|
||||||
|
@ -90,19 +93,15 @@ func TestInitBCWithMetrics(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDumpDB(t *testing.T) {
|
func TestDumpDB(t *testing.T) {
|
||||||
t.Run("too low chain", func(t *testing.T) {
|
|
||||||
d, err := ioutil.TempDir("./", "")
|
|
||||||
require.NoError(t, err)
|
|
||||||
err = os.Chdir(d)
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
err = os.Chdir("..")
|
|
||||||
require.NoError(t, err)
|
|
||||||
os.RemoveAll(d)
|
|
||||||
})
|
|
||||||
testDump := "file.acc"
|
testDump := "file.acc"
|
||||||
|
|
||||||
|
t.Run("too low chain", func(t *testing.T) {
|
||||||
|
d := t.TempDir()
|
||||||
|
err := os.Chdir(d)
|
||||||
|
require.NoError(t, err)
|
||||||
|
t.Cleanup(func() { require.NoError(t, os.Chdir(serverTestWD)) })
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
set.String("config-path", "../../../config", "")
|
set.String("config-path", path.Join(serverTestWD, "../../config"), "")
|
||||||
set.Bool("privnet", true, "")
|
set.Bool("privnet", true, "")
|
||||||
set.Bool("debug", true, "")
|
set.Bool("debug", true, "")
|
||||||
set.Int("start", 0, "")
|
set.Int("start", 0, "")
|
||||||
|
@ -114,18 +113,12 @@ func TestDumpDB(t *testing.T) {
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("positive", func(t *testing.T) {
|
t.Run("positive", func(t *testing.T) {
|
||||||
d, err := ioutil.TempDir("./", "")
|
d := t.TempDir()
|
||||||
|
err := os.Chdir(d)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
err = os.Chdir(d)
|
t.Cleanup(func() { require.NoError(t, os.Chdir(serverTestWD)) })
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
err = os.Chdir("..")
|
|
||||||
require.NoError(t, err)
|
|
||||||
os.RemoveAll(d)
|
|
||||||
})
|
|
||||||
testDump := "file.acc"
|
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
set.String("config-path", "../../../config", "")
|
set.String("config-path", path.Join(serverTestWD, "../../config"), "")
|
||||||
set.Bool("privnet", true, "")
|
set.Bool("privnet", true, "")
|
||||||
set.Bool("debug", true, "")
|
set.Bool("debug", true, "")
|
||||||
set.Int("start", 0, "")
|
set.Int("start", 0, "")
|
||||||
|
@ -138,21 +131,16 @@ func TestDumpDB(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRestoreDB(t *testing.T) {
|
func TestRestoreDB(t *testing.T) {
|
||||||
d, err := ioutil.TempDir("./", "")
|
d := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
testDump := "file1.acc"
|
testDump := "file1.acc"
|
||||||
saveDump := "file2.acc"
|
saveDump := "file2.acc"
|
||||||
err = os.Chdir(d)
|
err := os.Chdir(d)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() { require.NoError(t, os.Chdir(serverTestWD)) })
|
||||||
err = os.Chdir("..")
|
|
||||||
require.NoError(t, err)
|
|
||||||
os.RemoveAll(d)
|
|
||||||
})
|
|
||||||
|
|
||||||
//dump first
|
//dump first
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
set.String("config-path", "../../../config", "")
|
set.String("config-path", path.Join(serverTestWD, "../../config"), "")
|
||||||
set.Bool("privnet", true, "")
|
set.Bool("privnet", true, "")
|
||||||
set.Bool("debug", true, "")
|
set.Bool("debug", true, "")
|
||||||
set.Int("start", 0, "")
|
set.Int("start", 0, "")
|
||||||
|
|
|
@ -16,15 +16,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestInitSmartContract(t *testing.T) {
|
func TestInitSmartContract(t *testing.T) {
|
||||||
d, err := ioutil.TempDir("./", "")
|
d := t.TempDir()
|
||||||
|
testWD, err := os.Getwd()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
err = os.Chdir(d)
|
err = os.Chdir(d)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() { require.NoError(t, os.Chdir(testWD)) })
|
||||||
err = os.Chdir("..")
|
|
||||||
require.NoError(t, err)
|
|
||||||
os.RemoveAll(d)
|
|
||||||
})
|
|
||||||
contractName := "testContract"
|
contractName := "testContract"
|
||||||
|
|
||||||
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
set := flag.NewFlagSet("flagSet", flag.ExitOnError)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/big"
|
"math/big"
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -20,12 +19,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWalletAccountRemove(t *testing.T) {
|
func TestWalletAccountRemove(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.walletinit")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
e := newExecutor(t, false)
|
e := newExecutor(t, false)
|
||||||
|
|
||||||
walletPath := path.Join(tmpDir, "wallet.json")
|
walletPath := path.Join(tmpDir, "wallet.json")
|
||||||
|
@ -52,12 +46,7 @@ func TestWalletAccountRemove(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWalletInit(t *testing.T) {
|
func TestWalletInit(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.walletinit")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
e := newExecutor(t, false)
|
e := newExecutor(t, false)
|
||||||
|
|
||||||
walletPath := path.Join(tmpDir, "wallet.json")
|
walletPath := path.Join(tmpDir, "wallet.json")
|
||||||
|
@ -268,15 +257,11 @@ func TestClaimGas(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImportDeployed(t *testing.T) {
|
func TestImportDeployed(t *testing.T) {
|
||||||
|
tmpDir := t.TempDir()
|
||||||
e := newExecutor(t, true)
|
e := newExecutor(t, true)
|
||||||
|
|
||||||
h := deployVerifyContract(t, e)
|
h := deployVerifyContract(t, e)
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.importdeployed")
|
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.Remove(tmpDir)
|
|
||||||
})
|
|
||||||
walletPath := path.Join(tmpDir, "wallet.json")
|
walletPath := path.Join(tmpDir, "wallet.json")
|
||||||
|
|
||||||
e.Run(t, "neo-go", "wallet", "init", "--wallet", walletPath)
|
e.Run(t, "neo-go", "wallet", "init", "--wallet", walletPath)
|
||||||
|
|
||||||
priv, err := keys.NewPrivateKey()
|
priv, err := keys.NewPrivateKey()
|
||||||
|
@ -402,12 +387,7 @@ func TestDumpKeys(t *testing.T) {
|
||||||
|
|
||||||
// Testcase is the wallet of privnet validator.
|
// Testcase is the wallet of privnet validator.
|
||||||
func TestWalletConvert(t *testing.T) {
|
func TestWalletConvert(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.convert")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
e := newExecutor(t, false)
|
e := newExecutor(t, false)
|
||||||
|
|
||||||
outPath := path.Join(tmpDir, "wallet.json")
|
outPath := path.Join(tmpDir, "wallet.json")
|
||||||
|
|
|
@ -48,7 +48,7 @@ The compiler uses Go parser internally and depends on regular Go compiler
|
||||||
presence, so make sure you have it installed and set up. On some distributions
|
presence, so make sure you have it installed and set up. On some distributions
|
||||||
this requires you to set proper `GOROOT` environment variable, like
|
this requires you to set proper `GOROOT` environment variable, like
|
||||||
```
|
```
|
||||||
export GOROOT=/usr/lib64/go/1.14
|
export GOROOT=/usr/lib64/go/1.15
|
||||||
```
|
```
|
||||||
|
|
||||||
### Compiling
|
### Compiling
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -31,4 +31,4 @@ require (
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.14
|
go 1.15
|
||||||
|
|
|
@ -2,8 +2,6 @@ package core
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"sort"
|
"sort"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -79,11 +77,7 @@ func TestStateRoot(t *testing.T) {
|
||||||
updateIndex := bc.BlockHeight()
|
updateIndex := bc.BlockHeight()
|
||||||
transferTokenFromMultisigAccount(t, bc, h, bc.contracts.GAS.Hash, 1_0000_0000)
|
transferTokenFromMultisigAccount(t, bc, h, bc.contracts.GAS.Hash, 1_0000_0000)
|
||||||
|
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.test.stateroot")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
w := createAndWriteWallet(t, accs[0], path.Join(tmpDir, "w"), "pass")
|
w := createAndWriteWallet(t, accs[0], path.Join(tmpDir, "w"), "pass")
|
||||||
cfg := createStateRootConfig(w.Path(), "pass")
|
cfg := createStateRootConfig(w.Path(), "pass")
|
||||||
srv, err := stateroot.New(cfg, zaptest.NewLogger(t), bc, nil)
|
srv, err := stateroot.New(cfg, zaptest.NewLogger(t), bc, nil)
|
||||||
|
@ -151,11 +145,7 @@ func TestStateRootInitNonZeroHeight(t *testing.T) {
|
||||||
|
|
||||||
_, err := persistBlock(bc)
|
_, err := persistBlock(bc)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.initsnz")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
w := createAndWriteWallet(t, accs[0], path.Join(tmpDir, "w"), "pass")
|
w := createAndWriteWallet(t, accs[0], path.Join(tmpDir, "w"), "pass")
|
||||||
cfg := createStateRootConfig(w.Path(), "pass")
|
cfg := createStateRootConfig(w.Path(), "pass")
|
||||||
srv, err := stateroot.New(cfg, zaptest.NewLogger(t), bc, nil)
|
srv, err := stateroot.New(cfg, zaptest.NewLogger(t), bc, nil)
|
||||||
|
@ -195,12 +185,7 @@ func createStateRootConfig(walletPath, password string) config.StateRoot {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStateRootFull(t *testing.T) {
|
func TestStateRootFull(t *testing.T) {
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.stateroot4")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
bc := newTestChain(t)
|
bc := newTestChain(t)
|
||||||
|
|
||||||
h, pubs, accs := newMajorityMultisigWithGAS(t, 2)
|
h, pubs, accs := newMajorityMultisigWithGAS(t, 2)
|
||||||
|
|
|
@ -1,33 +1,13 @@
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type tempBadgerDB struct {
|
|
||||||
*BadgerDBStore
|
|
||||||
dir string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tbdb *tempBadgerDB) Close() error {
|
|
||||||
err := tbdb.BadgerDBStore.Close()
|
|
||||||
// Make test fail if failed to cleanup, even though technically it's
|
|
||||||
// not a BadgerDBStore problem.
|
|
||||||
osErr := os.RemoveAll(tbdb.dir)
|
|
||||||
if osErr != nil {
|
|
||||||
return osErr
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func newBadgerDBForTesting(t *testing.T) Store {
|
func newBadgerDBForTesting(t *testing.T) Store {
|
||||||
bdbDir, err := ioutil.TempDir(os.TempDir(), "testbadgerdb")
|
bdbDir := t.TempDir()
|
||||||
require.Nil(t, err, "failed to setup temporary directory")
|
|
||||||
|
|
||||||
dbConfig := DBConfiguration{
|
dbConfig := DBConfiguration{
|
||||||
Type: "badgerdb",
|
Type: "badgerdb",
|
||||||
BadgerDBOptions: BadgerDBOptions{
|
BadgerDBOptions: BadgerDBOptions{
|
||||||
|
@ -36,9 +16,5 @@ func newBadgerDBForTesting(t *testing.T) Store {
|
||||||
}
|
}
|
||||||
newBadgerStore, err := NewBadgerDBStore(dbConfig.BadgerDBOptions)
|
newBadgerStore, err := NewBadgerDBStore(dbConfig.BadgerDBOptions)
|
||||||
require.Nil(t, err, "NewBadgerDBStore error")
|
require.Nil(t, err, "NewBadgerDBStore error")
|
||||||
tbdb := &tempBadgerDB{
|
return newBadgerStore
|
||||||
BadgerDBStore: newBadgerStore,
|
|
||||||
dir: bdbDir,
|
|
||||||
}
|
|
||||||
return tbdb
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,23 +1,16 @@
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"path"
|
||||||
"os"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newBoltStoreForTesting(t *testing.T) Store {
|
func newBoltStoreForTesting(t *testing.T) Store {
|
||||||
testFileName := "test_bolt_db"
|
d := t.TempDir()
|
||||||
file, err := ioutil.TempFile("", testFileName)
|
testFileName := path.Join(d, "test_bolt_db")
|
||||||
t.Cleanup(func() {
|
boltDBStore, err := NewBoltDBStore(BoltDBOptions{FilePath: testFileName})
|
||||||
err := os.RemoveAll(file.Name())
|
|
||||||
require.NoError(t, err)
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NoError(t, file.Close())
|
|
||||||
boltDBStore, err := NewBoltDBStore(BoltDBOptions{FilePath: file.Name()})
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
return boltDBStore
|
return boltDBStore
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,33 +1,13 @@
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type tempLevelDB struct {
|
|
||||||
LevelDBStore
|
|
||||||
dir string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tldb *tempLevelDB) Close() error {
|
|
||||||
err := tldb.LevelDBStore.Close()
|
|
||||||
// Make test fail if failed to cleanup, even though technically it's
|
|
||||||
// not a LevelDBStore problem.
|
|
||||||
osErr := os.RemoveAll(tldb.dir)
|
|
||||||
if osErr != nil {
|
|
||||||
return osErr
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func newLevelDBForTesting(t *testing.T) Store {
|
func newLevelDBForTesting(t *testing.T) Store {
|
||||||
ldbDir, err := ioutil.TempDir(os.TempDir(), "testleveldb")
|
ldbDir := t.TempDir()
|
||||||
require.Nil(t, err, "failed to setup temporary directory")
|
|
||||||
|
|
||||||
dbConfig := DBConfiguration{
|
dbConfig := DBConfiguration{
|
||||||
Type: "leveldb",
|
Type: "leveldb",
|
||||||
LevelDBOptions: LevelDBOptions{
|
LevelDBOptions: LevelDBOptions{
|
||||||
|
@ -36,6 +16,5 @@ func newLevelDBForTesting(t *testing.T) Store {
|
||||||
}
|
}
|
||||||
newLevelStore, err := NewLevelDBStore(dbConfig.LevelDBOptions)
|
newLevelStore, err := NewLevelDBStore(dbConfig.LevelDBOptions)
|
||||||
require.Nil(t, err, "NewLevelDBStore error")
|
require.Nil(t, err, "NewLevelDBStore error")
|
||||||
tldb := &tempLevelDB{LevelDBStore: *newLevelStore, dir: ldbDir}
|
return newLevelStore
|
||||||
return tldb
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ func NewPrivateKeyFromBytes(b []byte) (*PrivateKey, error) {
|
||||||
d = new(big.Int).SetBytes(b)
|
d = new(big.Int).SetBytes(b)
|
||||||
)
|
)
|
||||||
|
|
||||||
x, y := c.ScalarBaseMult(d.Bytes())
|
x, y := c.ScalarBaseMult(b)
|
||||||
|
|
||||||
return &PrivateKey{
|
return &PrivateKey{
|
||||||
ecdsa.PrivateKey{
|
ecdsa.PrivateKey{
|
||||||
|
@ -85,7 +85,7 @@ func NewPrivateKeyFromASN1(b []byte) (*PrivateKey, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return NewPrivateKeyFromBytes(privkey.D.Bytes())
|
return &PrivateKey{*privkey}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PublicKey derives the public key from the private key.
|
// PublicKey derives the public key from the private key.
|
||||||
|
@ -155,10 +155,9 @@ func (p *PrivateKey) SignHashable(net uint32, hh hash.Hashable) []byte {
|
||||||
func getSignatureSlice(curve elliptic.Curve, r, s *big.Int) []byte {
|
func getSignatureSlice(curve elliptic.Curve, r, s *big.Int) []byte {
|
||||||
params := curve.Params()
|
params := curve.Params()
|
||||||
curveOrderByteSize := params.P.BitLen() / 8
|
curveOrderByteSize := params.P.BitLen() / 8
|
||||||
rBytes, sBytes := r.Bytes(), s.Bytes()
|
|
||||||
signature := make([]byte, curveOrderByteSize*2)
|
signature := make([]byte, curveOrderByteSize*2)
|
||||||
copy(signature[curveOrderByteSize-len(rBytes):], rBytes)
|
_ = r.FillBytes(signature[:curveOrderByteSize])
|
||||||
copy(signature[curveOrderByteSize*2-len(sBytes):], sBytes)
|
_ = s.FillBytes(signature[curveOrderByteSize:])
|
||||||
|
|
||||||
return signature
|
return signature
|
||||||
}
|
}
|
||||||
|
@ -170,9 +169,8 @@ func (p *PrivateKey) String() string {
|
||||||
|
|
||||||
// Bytes returns the underlying bytes of the PrivateKey.
|
// Bytes returns the underlying bytes of the PrivateKey.
|
||||||
func (p *PrivateKey) Bytes() []byte {
|
func (p *PrivateKey) Bytes() []byte {
|
||||||
bytes := p.D.Bytes()
|
|
||||||
result := make([]byte, 32)
|
result := make([]byte, 32)
|
||||||
copy(result[32-len(bytes):], bytes)
|
_ = p.D.FillBytes(result)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
gio "io"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/btcec"
|
"github.com/btcsuite/btcd/btcec"
|
||||||
|
@ -143,29 +142,10 @@ func (p *PublicKey) getBytes(compressed bool) []byte {
|
||||||
return []byte{0x00}
|
return []byte{0x00}
|
||||||
}
|
}
|
||||||
|
|
||||||
var resLen = 1 + coordLen
|
|
||||||
if !compressed {
|
|
||||||
resLen += coordLen
|
|
||||||
}
|
|
||||||
var res = make([]byte, resLen)
|
|
||||||
var prefix byte
|
|
||||||
|
|
||||||
xBytes := p.X.Bytes()
|
|
||||||
copy(res[1+coordLen-len(xBytes):], xBytes)
|
|
||||||
if compressed {
|
if compressed {
|
||||||
if p.Y.Bit(0) == 0 {
|
return elliptic.MarshalCompressed(p.Curve, p.X, p.Y)
|
||||||
prefix = 0x02
|
|
||||||
} else {
|
|
||||||
prefix = 0x03
|
|
||||||
}
|
}
|
||||||
} else {
|
return elliptic.Marshal(p.Curve, p.X, p.Y)
|
||||||
prefix = 0x04
|
|
||||||
yBytes := p.Y.Bytes()
|
|
||||||
copy(res[1+coordLen+coordLen-len(yBytes):], yBytes)
|
|
||||||
}
|
|
||||||
res[0] = prefix
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bytes returns byte array representation of the public key in compressed
|
// Bytes returns byte array representation of the public key in compressed
|
||||||
|
@ -239,8 +219,7 @@ func (p *PublicKey) DecodeBytes(data []byte) error {
|
||||||
return b.Err
|
return b.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
b.ReadB()
|
if b.Len() != 0 {
|
||||||
if b.Err != gio.EOF {
|
|
||||||
return errors.New("extra data")
|
return errors.New("extra data")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -270,7 +249,7 @@ func (p *PublicKey) DecodeBinary(r *io.BinReader) {
|
||||||
return
|
return
|
||||||
case 0x02, 0x03:
|
case 0x02, 0x03:
|
||||||
// Compressed public keys
|
// Compressed public keys
|
||||||
xbytes := make([]byte, 32)
|
xbytes := make([]byte, coordLen)
|
||||||
r.ReadBytes(xbytes)
|
r.ReadBytes(xbytes)
|
||||||
if r.Err != nil {
|
if r.Err != nil {
|
||||||
return
|
return
|
||||||
|
@ -283,8 +262,8 @@ func (p *PublicKey) DecodeBinary(r *io.BinReader) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
case 0x04:
|
case 0x04:
|
||||||
xbytes := make([]byte, 32)
|
xbytes := make([]byte, coordLen)
|
||||||
ybytes := make([]byte, 32)
|
ybytes := make([]byte, coordLen)
|
||||||
r.ReadBytes(xbytes)
|
r.ReadBytes(xbytes)
|
||||||
r.ReadBytes(ybytes)
|
r.ReadBytes(ybytes)
|
||||||
if r.Err != nil {
|
if r.Err != nil {
|
||||||
|
|
|
@ -165,7 +165,7 @@ func TestUnique(t *testing.T) {
|
||||||
require.Equal(t, 1, unique.Len())
|
require.Equal(t, 1, unique.Len())
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPubKey(t *testing.T) *PublicKey {
|
func getPubKey(t testing.TB) *PublicKey {
|
||||||
pubKey, err := NewPublicKeyFromString("031ee4e73a17d8f76dc02532e2620bcb12425b33c0c9f9694cc2caa8226b68cad4")
|
pubKey, err := NewPublicKeyFromString("031ee4e73a17d8f76dc02532e2620bcb12425b33c0c9f9694cc2caa8226b68cad4")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
return pubKey
|
return pubKey
|
||||||
|
@ -212,3 +212,37 @@ func TestUnmarshallJSONBadFormat(t *testing.T) {
|
||||||
err := json.Unmarshal([]byte(str), actual)
|
err := json.Unmarshal([]byte(str), actual)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkPublicEqual(t *testing.B) {
|
||||||
|
k11 := getPubKey(t)
|
||||||
|
k12 := getPubKey(t)
|
||||||
|
k2, err := NewPublicKeyFromString("03b209fd4f53a7170ea4444e0cb0a6bb6a53c2bd016926989cf85f9b0fba17a70c")
|
||||||
|
require.NoError(t, err)
|
||||||
|
for n := 0; n < t.N; n++ {
|
||||||
|
_ = k11.Equal(k12)
|
||||||
|
_ = k11.Equal(k2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkPublicBytes(t *testing.B) {
|
||||||
|
k := getPubKey(t)
|
||||||
|
for n := 0; n < t.N; n++ {
|
||||||
|
_ = k.Bytes()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkPublicUncompressedBytes(t *testing.B) {
|
||||||
|
k := getPubKey(t)
|
||||||
|
for n := 0; n < t.N; n++ {
|
||||||
|
_ = k.Bytes()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkPublicDecodeBytes(t *testing.B) {
|
||||||
|
keyBytes, err := hex.DecodeString("03b209fd4f53a7170ea4444e0cb0a6bb6a53c2bd016926989cf85f9b0fba17a70c")
|
||||||
|
require.NoError(t, err)
|
||||||
|
k := new(PublicKey)
|
||||||
|
for n := 0; n < t.N; n++ {
|
||||||
|
require.NoError(t, k.DecodeBytes(keyBytes))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package io
|
package io
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -10,34 +9,22 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMakeDirForFile_HappyPath(t *testing.T) {
|
func TestMakeDirForFile_HappyPath(t *testing.T) {
|
||||||
tempDir, err := ioutil.TempDir("", "test")
|
tempDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
filePath := path.Join(tempDir, "testDir/testFile.test")
|
||||||
|
err := MakeDirForFile(filePath, "test")
|
||||||
filePath := tempDir + "/testDir/testFile.test"
|
|
||||||
err = MakeDirForFile(filePath, "test")
|
|
||||||
t.Cleanup(func() {
|
|
||||||
removeDir(t, tempDir)
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, errChDir := os.Create(filePath)
|
_, errChDir := os.Create(filePath)
|
||||||
require.NoError(t, errChDir)
|
require.NoError(t, errChDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeDir(t *testing.T, dirName string) {
|
|
||||||
err := os.RemoveAll(dirName)
|
|
||||||
require.NoError(t, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMakeDirForFile_Negative(t *testing.T) {
|
func TestMakeDirForFile_Negative(t *testing.T) {
|
||||||
file, err := ioutil.TempFile("", "test")
|
tempDir := t.TempDir()
|
||||||
|
filePath := path.Join(tempDir, "testFile.test")
|
||||||
|
_, err := os.Create(filePath)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
filePath := file.Name() + "/error"
|
filePath = path.Join(filePath, "error")
|
||||||
dir := path.Dir(filePath)
|
|
||||||
err = MakeDirForFile(filePath, "test")
|
err = MakeDirForFile(filePath, "test")
|
||||||
t.Cleanup(func() {
|
|
||||||
removeDir(t, dir)
|
|
||||||
})
|
|
||||||
require.Errorf(t, err, "could not create dir for test: mkdir %s : not a directory", filePath)
|
require.Errorf(t, err, "could not create dir for test: mkdir %s : not a directory", filePath)
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,11 +162,7 @@ func TestLoad(t *testing.T) {
|
||||||
return a * b
|
return a * b
|
||||||
}
|
}
|
||||||
}`
|
}`
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.vmcliloadtest")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("loadgo", func(t *testing.T) {
|
t.Run("loadgo", func(t *testing.T) {
|
||||||
filename := path.Join(tmpDir, "vmtestcontract.go")
|
filename := path.Join(tmpDir, "vmtestcontract.go")
|
||||||
|
@ -262,11 +258,7 @@ func TestRunWithDifferentArguments(t *testing.T) {
|
||||||
return arg
|
return arg
|
||||||
}`
|
}`
|
||||||
|
|
||||||
tmpDir, err := ioutil.TempDir("", "neogo.vmcliruntest")
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
|
||||||
t.Cleanup(func() {
|
|
||||||
os.RemoveAll(tmpDir)
|
|
||||||
})
|
|
||||||
filename := path.Join(tmpDir, "run_vmtestcontract.go")
|
filename := path.Join(tmpDir, "run_vmtestcontract.go")
|
||||||
require.NoError(t, ioutil.WriteFile(filename, []byte(src), os.ModePerm))
|
require.NoError(t, ioutil.WriteFile(filename, []byte(src), os.ModePerm))
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@ package wallet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -75,10 +73,8 @@ func TestPath(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSave(t *testing.T) {
|
func TestSave(t *testing.T) {
|
||||||
file, err := ioutil.TempFile("", walletTemplate)
|
wallet := checkWalletConstructor(t)
|
||||||
require.NoError(t, err)
|
|
||||||
wallet, err := NewWallet(file.Name())
|
|
||||||
require.NoError(t, err)
|
|
||||||
wallet.AddAccount(&Account{
|
wallet.AddAccount(&Account{
|
||||||
privateKey: nil,
|
privateKey: nil,
|
||||||
publicKey: nil,
|
publicKey: nil,
|
||||||
|
@ -91,9 +87,6 @@ func TestSave(t *testing.T) {
|
||||||
Default: false,
|
Default: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Cleanup(func() {
|
|
||||||
removeWallet(t, file.Name())
|
|
||||||
})
|
|
||||||
errForSave := wallet.Save()
|
errForSave := wallet.Save()
|
||||||
require.NoError(t, errForSave)
|
require.NoError(t, errForSave)
|
||||||
|
|
||||||
|
@ -130,21 +123,13 @@ func TestJSONMarshallUnmarshal(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkWalletConstructor(t *testing.T) *Wallet {
|
func checkWalletConstructor(t *testing.T) *Wallet {
|
||||||
file, err := ioutil.TempFile("", walletTemplate)
|
tmpDir := t.TempDir()
|
||||||
require.NoError(t, err)
|
file := path.Join(tmpDir, walletTemplate)
|
||||||
wallet, err := NewWallet(file.Name())
|
wallet, err := NewWallet(file)
|
||||||
t.Cleanup(func() {
|
|
||||||
removeWallet(t, file.Name())
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
return wallet
|
return wallet
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeWallet(t *testing.T, walletPath string) {
|
|
||||||
err := os.RemoveAll(walletPath)
|
|
||||||
require.NoError(t, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestWallet_AddToken(t *testing.T) {
|
func TestWallet_AddToken(t *testing.T) {
|
||||||
w := checkWalletConstructor(t)
|
w := checkWalletConstructor(t)
|
||||||
tok := NewToken(util.Uint160{1, 2, 3}, "Rubl", "RUB", 2, manifest.NEP17StandardName)
|
tok := NewToken(util.Uint160{1, 2, 3}, "Rubl", "RUB", 2, manifest.NEP17StandardName)
|
||||||
|
|
Loading…
Reference in a new issue