mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 04:36:42 +00:00
190 lines
4.4 KiB
Go
190 lines
4.4 KiB
Go
package javascript
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/obscuren/otto"
|
|
"os"
|
|
"path"
|
|
// "reflect"
|
|
"testing"
|
|
|
|
"github.com/ethereum/go-ethereum/eth"
|
|
"github.com/ethereum/go-ethereum/ethutil"
|
|
)
|
|
|
|
func TestJEthRE(t *testing.T) {
|
|
os.RemoveAll("/tmp/eth/")
|
|
err := os.MkdirAll("/tmp/eth/data/", os.ModePerm)
|
|
if err != nil {
|
|
t.Errorf("%v", err)
|
|
return
|
|
}
|
|
|
|
err = ethutil.WriteFile("/tmp/eth/default.prv", []byte("946d0fe6dd95ef5476dd1fd204626b59c973bd72ffac4a108827ef488465cc68"))
|
|
if err != nil {
|
|
t.Errorf("%v", err)
|
|
return
|
|
}
|
|
|
|
ethereum, err := eth.New(ð.Config{
|
|
DataDir: "/tmp/eth",
|
|
KeyStore: "file",
|
|
})
|
|
if err != nil {
|
|
t.Errorf("%v", err)
|
|
return
|
|
}
|
|
|
|
assetPath := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "cmd", "mist", "assets", "ext")
|
|
jethre := NewJEthRE(ethereum, assetPath)
|
|
|
|
val, err := jethre.Run("eth.getCoinbase()")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
|
|
pp, err := jethre.PrettyPrint(val)
|
|
if err != nil {
|
|
t.Errorf("%v", err)
|
|
}
|
|
|
|
if !val.IsString() {
|
|
t.Errorf("incorrect type, expected string, got %v: %v", val, pp)
|
|
}
|
|
strVal, _ := val.ToString()
|
|
expected := "0x25ec29286951d5acc52a4f4d631f479c1002f97b"
|
|
if strVal != expected {
|
|
t.Errorf("incorrect result, expected %s, got %v", expected, strVal)
|
|
}
|
|
|
|
// no block 1, error
|
|
val, err = jethre.Run("eth.block(10)")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
pp, err = jethre.PrettyPrint(val)
|
|
if err != nil {
|
|
t.Errorf("%v", err)
|
|
}
|
|
// t.Logf("block is %v", pp)
|
|
|
|
if val != otto.UndefinedValue() {
|
|
t.Errorf("expected undefined value, got %v", pp)
|
|
}
|
|
|
|
val, err = jethre.Run(`eth.block("b5d6d8402156c5c1dfadaa4b87c676b5bcadb17ef9bc8e939606daaa0d35f55d")`)
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
pp, err = jethre.PrettyPrint(val)
|
|
if err != nil {
|
|
t.Errorf("%v", err)
|
|
}
|
|
// t.Logf("block is %v", pp)
|
|
|
|
if val == otto.UndefinedValue() {
|
|
t.Errorf("undefined value")
|
|
}
|
|
|
|
var val0 otto.Value
|
|
// should get current block
|
|
val0, err = jethre.Run("eth.block()")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
if !val.IsObject() {
|
|
t.Errorf("expected object")
|
|
}
|
|
|
|
fn := "/tmp/eth/data/blockchain.0"
|
|
val, err = jethre.Run("eth.export(\"" + fn + "\")")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
if _, err = os.Stat(fn); err != nil {
|
|
t.Errorf("expected no error on file, got %v", err)
|
|
}
|
|
|
|
ethereum, err = eth.New(ð.Config{
|
|
DataDir: "/tmp/eth1",
|
|
KeyStore: "file",
|
|
})
|
|
val, err = jethre.Run("eth.import(\"" + fn + "\")")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
|
|
var val1 otto.Value
|
|
|
|
// should get current block
|
|
val1, err = jethre.Run("eth.block()")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
|
|
// FIXME: neither != , nor reflect.DeepEqual works, doing string comparison
|
|
v0 := fmt.Sprintf("%v", val0)
|
|
v1 := fmt.Sprintf("%v", val1)
|
|
if v0 != v1 {
|
|
t.Errorf("expected same head after export-import, got %v (!=%v)", v1, v0)
|
|
}
|
|
|
|
ethereum.Start()
|
|
// FIXME:
|
|
// ethereum.Stop causes panic: runtime error: invalid memory address or nil pointer
|
|
// github.com/ethereum/go-ethereum/eth.(*Ethereum).Stop(0xc208f46270)
|
|
// /Users/tron/Work/ethereum/go/src/github.com/ethereum/go-ethereum/eth/backend.go:292 +0xdc
|
|
// defer ethereum.Stop()
|
|
|
|
val, err = jethre.Run("eth.isMining()")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
var mining bool
|
|
mining, err = val.ToBoolean()
|
|
if err != nil {
|
|
t.Errorf("expected boolean, got %v", err)
|
|
}
|
|
if mining {
|
|
t.Errorf("expected false (not mining), got true")
|
|
}
|
|
|
|
val, err = jethre.Run("eth.setMining(true)")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
mining, _ = val.ToBoolean()
|
|
if !mining {
|
|
t.Errorf("expected true (mining), got false")
|
|
}
|
|
val, err = jethre.Run("eth.isMining()")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
mining, err = val.ToBoolean()
|
|
if err != nil {
|
|
t.Errorf("expected boolean, got %v", err)
|
|
}
|
|
if !mining {
|
|
t.Errorf("expected true (mining), got false")
|
|
}
|
|
|
|
val, err = jethre.Run("eth.setMining(true)")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
mining, _ = val.ToBoolean()
|
|
if !mining {
|
|
t.Errorf("expected true (mining), got false")
|
|
}
|
|
|
|
val, err = jethre.Run("eth.setMining(false)")
|
|
if err != nil {
|
|
t.Errorf("expected no error, got %v", err)
|
|
}
|
|
mining, _ = val.ToBoolean()
|
|
if mining {
|
|
t.Errorf("expected false (not mining), got true")
|
|
}
|
|
|
|
}
|