Merge pull request #1 from tgerring/tests

Initial tests based on check framework
This commit is contained in:
Taylor Gerring 2014-11-11 20:37:18 +01:00
commit 1d866b5e57
10 changed files with 494 additions and 95 deletions

73
ethutil/big_test.go Normal file
View File

@ -0,0 +1,73 @@
package ethutil
import (
"bytes"
"testing"
)
func TestMisc(t *testing.T) {
a := Big("10")
b := Big("57896044618658097711785492504343953926634992332820282019728792003956564819968")
c := []byte{1, 2, 3, 4}
z := BitTest(a, 1)
if z != true {
t.Error("Expected true got", z)
}
U256(a)
S256(a)
U256(b)
S256(b)
BigD(c)
}
func TestBigMax(t *testing.T) {
a := Big("10")
b := Big("5")
max1 := BigMax(a, b)
if max1 != a {
t.Errorf("Expected %d got %d", a, max1)
}
max2 := BigMax(b, a)
if max2 != a {
t.Errorf("Expected %d got %d", a, max2)
}
}
func TestBigMin(t *testing.T) {
a := Big("10")
b := Big("5")
min1 := BigMin(a, b)
if min1 != b {
t.Errorf("Expected %d got %d", b, min1)
}
min2 := BigMin(b, a)
if min2 != b {
t.Errorf("Expected %d got %d", b, min2)
}
}
func TestBigCopy(t *testing.T) {
a := Big("10")
b := BigCopy(a)
c := Big("1000000000000")
y := BigToBytes(b, 16)
ybytes := []byte{0, 10}
z := BigToBytes(c, 16)
zbytes := []byte{232, 212, 165, 16, 0}
if bytes.Compare(y, ybytes) != 0 {
t.Error("Got", ybytes)
}
if bytes.Compare(z, zbytes) != 0 {
t.Error("Got", zbytes)
}
}

View File

@ -1,14 +1,193 @@
package ethutil package ethutil
import ( import (
"bytes" checker "gopkg.in/check.v1"
"testing"
) )
func TestParseData(t *testing.T) { type BytesSuite struct{}
data := ParseData("hello", "world", "0x0106")
exp := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000" var _ = checker.Suite(&BytesSuite{})
if bytes.Compare(data, Hex2Bytes(exp)) != 0 {
t.Error("Error parsing data") func (s *BytesSuite) TestByteString(c *checker.C) {
} var data Bytes
data = []byte{102, 111, 111}
exp := "foo"
res := data.String()
c.Assert(res, checker.Equals, exp)
}
/*
func (s *BytesSuite) TestDeleteFromByteSlice(c *checker.C) {
data := []byte{1, 2, 3, 4}
slice := []byte{1, 2, 3, 4}
exp := []byte{1, 4}
res := DeleteFromByteSlice(data, slice)
c.Assert(res, checker.DeepEquals, exp)
}
*/
func (s *BytesSuite) TestNumberToBytes(c *checker.C) {
// data1 := int(1)
// res1 := NumberToBytes(data1, 16)
// c.Check(res1, checker.Panics)
var data2 float64 = 3.141592653
exp2 := []byte{0xe9, 0x38}
res2 := NumberToBytes(data2, 16)
c.Assert(res2, checker.DeepEquals, exp2)
}
func (s *BytesSuite) TestBytesToNumber(c *checker.C) {
datasmall := []byte{0xe9, 0x38, 0xe9, 0x38}
datalarge := []byte{0xe9, 0x38, 0xe9, 0x38, 0xe9, 0x38, 0xe9, 0x38}
var expsmall uint64 = 0xe938e938
var explarge uint64 = 0x0
ressmall := BytesToNumber(datasmall)
reslarge := BytesToNumber(datalarge)
c.Assert(ressmall, checker.Equals, expsmall)
c.Assert(reslarge, checker.Equals, explarge)
}
func (s *BytesSuite) TestReadVarInt(c *checker.C) {
data8 := []byte{1, 2, 3, 4, 5, 6, 7, 8}
data4 := []byte{1, 2, 3, 4}
data2 := []byte{1, 2}
data1 := []byte{1}
exp8 := uint64(72623859790382856)
exp4 := uint64(16909060)
exp2 := uint64(258)
exp1 := uint64(1)
res8 := ReadVarInt(data8)
res4 := ReadVarInt(data4)
res2 := ReadVarInt(data2)
res1 := ReadVarInt(data1)
c.Assert(res8, checker.Equals, exp8)
c.Assert(res4, checker.Equals, exp4)
c.Assert(res2, checker.Equals, exp2)
c.Assert(res1, checker.Equals, exp1)
}
func (s *BytesSuite) TestBinaryLength(c *checker.C) {
data1 := 0
data2 := 920987656789
exp1 := 0
exp2 := 5
res1 := BinaryLength(data1)
res2 := BinaryLength(data2)
c.Assert(res1, checker.Equals, exp1)
c.Assert(res2, checker.Equals, exp2)
}
func (s *BytesSuite) TestCopyBytes(c *checker.C) {
data1 := []byte{1, 2, 3, 4}
exp1 := []byte{1, 2, 3, 4}
res1 := CopyBytes(data1)
c.Assert(res1, checker.DeepEquals, exp1)
}
func (s *BytesSuite) TestIsHex(c *checker.C) {
data1 := "a9e67e"
exp1 := false
res1 := IsHex(data1)
c.Assert(res1, checker.DeepEquals, exp1)
data2 := "0xa9e67e00"
exp2 := true
res2 := IsHex(data2)
c.Assert(res2, checker.DeepEquals, exp2)
}
func (s *BytesSuite) TestParseDataString(c *checker.C) {
res1 := ParseData("hello", "world", "0x0106")
data := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000"
exp1 := Hex2Bytes(data)
c.Assert(res1, checker.DeepEquals, exp1)
}
func (s *BytesSuite) TestParseDataBytes(c *checker.C) {
data1 := []byte{232, 212, 165, 16, 0}
exp1 := []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 212, 165, 16, 0}
res1 := ParseData(data1)
c.Assert(res1, checker.DeepEquals, exp1)
}
func (s *BytesSuite) TestLeftPadBytes(c *checker.C) {
val1 := []byte{1, 2, 3, 4}
exp1 := []byte{0, 0, 0, 0, 1, 2, 3, 4}
res1 := LeftPadBytes(val1, 8)
res2 := LeftPadBytes(val1, 2)
c.Assert(res1, checker.DeepEquals, exp1)
c.Assert(res2, checker.DeepEquals, val1)
}
func (s *BytesSuite) TestFormatData(c *checker.C) {
data1 := ""
data2 := "0xa9e67e00"
data3 := "a9e67e"
data4 := "\"a9e67e00\""
// exp1 := []byte{}
exp2 := []byte{00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 0xa9, 0xe6, 0x7e, 00}
exp3 := []byte{00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00}
exp4 := []byte{0x61, 0x39, 0x65, 0x36, 0x37, 0x65, 0x30, 0x30, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00}
res1 := FormatData(data1)
res2 := FormatData(data2)
res3 := FormatData(data3)
res4 := FormatData(data4)
c.Assert(res1, checker.IsNil)
c.Assert(res2, checker.DeepEquals, exp2)
c.Assert(res3, checker.DeepEquals, exp3)
c.Assert(res4, checker.DeepEquals, exp4)
}
func (s *BytesSuite) TestRightPadBytes(c *checker.C) {
val := []byte{1, 2, 3, 4}
exp := []byte{1, 2, 3, 4, 0, 0, 0, 0}
resstd := RightPadBytes(val, 8)
resshrt := RightPadBytes(val, 2)
c.Assert(resstd, checker.DeepEquals, exp)
c.Assert(resshrt, checker.DeepEquals, val)
}
func (s *BytesSuite) TestLeftPadString(c *checker.C) {
val := "test"
exp := "\x30\x30\x30\x30" + val
resstd := LeftPadString(val, 8)
resshrt := LeftPadString(val, 2)
c.Assert(resstd, checker.Equals, exp)
c.Assert(resshrt, checker.Equals, val)
}
func (s *BytesSuite) TestRightPadString(c *checker.C) {
val := "test"
exp := val + "\x30\x30\x30\x30"
resstd := RightPadString(val, 8)
resshrt := RightPadString(val, 2)
c.Assert(resstd, checker.Equals, exp)
c.Assert(resshrt, checker.Equals, val)
} }

View File

@ -66,6 +66,7 @@ func CurrencyToString(num *big.Int) string {
denom = "Ada" denom = "Ada"
} }
// TODO add comment clarifying expected behavior
if len(fin.String()) > 5 { if len(fin.String()) > 5 {
return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom) return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom)
} }

View File

@ -2,18 +2,55 @@ package ethutil
import ( import (
"math/big" "math/big"
"os"
"testing" "testing"
) )
func TestOS(t *testing.T) {
res := IsWindows()
if res && (os.PathSeparator != '\\' || os.PathListSeparator != ';') {
t.Error("IsWindows is", res, "but path is", os.PathSeparator)
}
if !res && (os.PathSeparator == '\\' && os.PathListSeparator == ';') {
t.Error("IsWindows is", res, "but path is", os.PathSeparator)
}
}
func TestWindonziePath(t *testing.T) {
path := "/opt/eth/test/file.ext"
res := WindonizePath(path)
iswindowspath := os.PathSeparator == '\\'
if !iswindowspath && string(res[0]) != "/" {
t.Error("Got", res)
}
if iswindowspath && string(res[0]) == "/" {
t.Error("Got", res)
}
}
func TestCommon(t *testing.T) { func TestCommon(t *testing.T) {
douglas := CurrencyToString(BigPow(10, 43))
einstein := CurrencyToString(BigPow(10, 22))
ether := CurrencyToString(BigPow(10, 19)) ether := CurrencyToString(BigPow(10, 19))
finney := CurrencyToString(BigPow(10, 16)) finney := CurrencyToString(BigPow(10, 16))
szabo := CurrencyToString(BigPow(10, 13)) szabo := CurrencyToString(BigPow(10, 13))
vito := CurrencyToString(BigPow(10, 10)) shannon := CurrencyToString(BigPow(10, 10))
turing := CurrencyToString(BigPow(10, 7)) babbage := CurrencyToString(BigPow(10, 7))
eins := CurrencyToString(BigPow(10, 4)) ada := CurrencyToString(BigPow(10, 4))
wei := CurrencyToString(big.NewInt(10)) wei := CurrencyToString(big.NewInt(10))
if douglas != "10 Douglas" {
t.Error("Got", douglas)
}
if einstein != "10 Einstein" {
t.Error("Got", einstein)
}
if ether != "10 Ether" { if ether != "10 Ether" {
t.Error("Got", ether) t.Error("Got", ether)
} }
@ -26,19 +63,37 @@ func TestCommon(t *testing.T) {
t.Error("Got", szabo) t.Error("Got", szabo)
} }
if vito != "10 Shannon" { if shannon != "10 Shannon" {
t.Error("Got", vito) t.Error("Got", shannon)
} }
if turing != "10 Babbage" { if babbage != "10 Babbage" {
t.Error("Got", turing) t.Error("Got", babbage)
} }
if eins != "10 Ada" { if ada != "10 Ada" {
t.Error("Got", eins) t.Error("Got", ada)
} }
if wei != "10 Wei" { if wei != "10 Wei" {
t.Error("Got", wei) t.Error("Got", wei)
} }
} }
func TestLarge(t *testing.T) {
douglaslarge := CurrencyToString(BigPow(100000000, 43))
adalarge := CurrencyToString(BigPow(100000000, 4))
weilarge := CurrencyToString(big.NewInt(100000000))
if douglaslarge != "10000E298 Douglas" {
t.Error("Got", douglaslarge)
}
if adalarge != "10000E7 Einstein" {
t.Error("Got", adalarge)
}
if weilarge != "100 Babbage" {
t.Error("Got", weilarge)
}
}

8
ethutil/main_test.go Normal file
View File

@ -0,0 +1,8 @@
package ethutil
import (
checker "gopkg.in/check.v1"
"testing"
)
func Test(t *testing.T) { checker.TestingT(t) }

51
ethutil/path_test.go Normal file
View File

@ -0,0 +1,51 @@
package ethutil
import (
// "os"
"testing"
)
func TestGoodFile(t *testing.T) {
goodpath := "~/goethereumtest.pass"
path := ExpandHomePath(goodpath)
contentstring := "3.14159265358979323846"
err := WriteFile(path, []byte(contentstring))
if err != nil {
t.Error("Could not write file")
}
if !FileExist(path) {
t.Error("File not found at", path)
}
v, err := ReadAllFile(path)
if err != nil {
t.Error("Could not read file", path)
}
if v != contentstring {
t.Error("Expected", contentstring, "Got", v)
}
}
func TestBadFile(t *testing.T) {
badpath := "/this/path/should/not/exist/goethereumtest.fail"
path := ExpandHomePath(badpath)
contentstring := "3.14159265358979323846"
err := WriteFile(path, []byte(contentstring))
if err == nil {
t.Error("Wrote file, but should not be able to", path)
}
if FileExist(path) {
t.Error("Found file, but should not be able to", path)
}
v, err := ReadAllFile(path)
if err == nil {
t.Error("Read file, but should not be able to", v)
}
}

17
ethutil/rand_test.go Normal file
View File

@ -0,0 +1,17 @@
package ethutil
import (
checker "gopkg.in/check.v1"
)
type RandomSuite struct{}
var _ = checker.Suite(&RandomSuite{})
func (s *RandomSuite) TestRandomUint64(c *checker.C) {
res1, _ := RandomUint64()
res2, _ := RandomUint64()
c.Assert(res1, checker.NotNil)
c.Assert(res2, checker.NotNil)
c.Assert(res1, checker.Not(checker.Equals), res2)
}

View File

@ -1,12 +1,23 @@
package ethutil package ethutil
import ( import (
"fmt" checker "gopkg.in/check.v1"
"testing"
) )
func TestSize(t *testing.T) { type SizeSuite struct{}
fmt.Println(StorageSize(2381273))
fmt.Println(StorageSize(2192)) var _ = checker.Suite(&SizeSuite{})
fmt.Println(StorageSize(12))
func (s *SizeSuite) TestStorageSizeString(c *checker.C) {
data1 := 2381273
data2 := 2192
data3 := 12
exp1 := "2.38 mB"
exp2 := "2.19 kB"
exp3 := "12.00 B"
c.Assert(StorageSize(data1).String(), checker.Equals, exp1)
c.Assert(StorageSize(data2).String(), checker.Equals, exp2)
c.Assert(StorageSize(data3).String(), checker.Equals, exp3)
} }

View File

@ -1,86 +1,69 @@
package ethutil package ethutil
import ( import (
"bytes" checker "gopkg.in/check.v1"
"fmt"
"math/big" "math/big"
"testing"
) )
func TestValueCmp(t *testing.T) { type ValueSuite struct{}
var _ = checker.Suite(&ValueSuite{})
func (s *ValueSuite) TestValueCmp(c *checker.C) {
val1 := NewValue("hello") val1 := NewValue("hello")
val2 := NewValue("world") val2 := NewValue("world")
if val1.Cmp(val2) { c.Assert(val1.Cmp(val2), checker.Equals, false)
t.Error("Expected values not to be equal")
}
val3 := NewValue("hello") val3 := NewValue("hello")
val4 := NewValue("hello") val4 := NewValue("hello")
if !val3.Cmp(val4) { c.Assert(val3.Cmp(val4), checker.Equals, true)
t.Error("Expected values to be equal")
}
} }
func TestValueTypes(t *testing.T) { func (s *ValueSuite) TestValueTypes(c *checker.C) {
str := NewValue("str") str := NewValue("str")
num := NewValue(1) num := NewValue(1)
inter := NewValue([]interface{}{1}) inter := NewValue([]interface{}{1})
byt := NewValue([]byte{1, 2, 3, 4}) byt := NewValue([]byte{1, 2, 3, 4})
bigInt := NewValue(big.NewInt(10)) bigInt := NewValue(big.NewInt(10))
if str.Str() != "str" { strExp := "str"
t.Errorf("expected Str to return 'str', got %s", str.Str()) numExp := uint64(1)
}
if num.Uint() != 1 {
t.Errorf("expected Uint to return '1', got %d", num.Uint())
}
interExp := []interface{}{1} interExp := []interface{}{1}
if !NewValue(inter.Interface()).Cmp(NewValue(interExp)) {
t.Errorf("expected Interface to return '%v', got %v", interExp, num.Interface())
}
bytExp := []byte{1, 2, 3, 4} bytExp := []byte{1, 2, 3, 4}
if bytes.Compare(byt.Bytes(), bytExp) != 0 {
t.Errorf("expected Bytes to return '%v', got %v", bytExp, byt.Bytes())
}
bigExp := big.NewInt(10) bigExp := big.NewInt(10)
if bigInt.BigInt().Cmp(bigExp) != 0 {
t.Errorf("expected BigInt to return '%v', got %v", bigExp, bigInt.BigInt()) c.Assert(str.Str(), checker.Equals, strExp)
} c.Assert(num.Uint(), checker.Equals, numExp)
c.Assert(NewValue(inter.Interface()).Cmp(NewValue(interExp)), checker.Equals, true)
c.Assert(byt.Bytes(), checker.DeepEquals, bytExp)
c.Assert(bigInt.BigInt(), checker.DeepEquals, bigExp)
} }
func TestIterator(t *testing.T) { func (s *ValueSuite) TestIterator(c *checker.C) {
value := NewValue([]interface{}{1, 2, 3}) value := NewValue([]interface{}{1, 2, 3})
it := value.NewIterator() iter := value.NewIterator()
values := []uint64{1, 2, 3} values := []uint64{1, 2, 3}
i := 0 i := 0
for it.Next() { for iter.Next() {
if values[i] != it.Value().Uint() { c.Assert(values[i], checker.Equals, iter.Value().Uint())
t.Errorf("Expected %d, got %d", values[i], it.Value().Uint())
}
i++ i++
} }
} }
func TestMath(t *testing.T) { func (s *ValueSuite) TestMath(c *checker.C) {
a := NewValue(1) data1 := NewValue(1)
a.Add(1).Add(1) data1.Add(1).Add(1)
exp1 := NewValue(3)
data2 := NewValue(2)
data2.Sub(1).Sub(1)
exp2 := NewValue(0)
if !a.DeepCmp(NewValue(3)) { c.Assert(data1.DeepCmp(exp1), checker.Equals, true)
t.Error("Expected 3, got", a) c.Assert(data2.DeepCmp(exp2), checker.Equals, true)
}
a = NewValue(2)
a.Sub(1).Sub(1)
if !a.DeepCmp(NewValue(0)) {
t.Error("Expected 0, got", a)
}
} }
func TestString(t *testing.T) { func (s *ValueSuite) TestString(c *checker.C) {
a := NewValue("10") data := "10"
fmt.Println("VALUE WITH STRING:", a.Int()) exp := int64(10)
c.Assert(NewValue(data).Int(), checker.DeepEquals, exp)
} }

View File

@ -1,6 +1,7 @@
package state package state
import ( import (
. "gopkg.in/check.v1"
"testing" "testing"
"github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb"
@ -8,29 +9,49 @@ import (
"github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie"
) )
var ZeroHash256 = make([]byte, 32) func Test(t *testing.T) { TestingT(t) }
func TestSnapshot(t *testing.T) { type StateSuite struct {
state *State
}
var _ = Suite(&StateSuite{})
const expectedasbytes = "Expected % x Got % x"
// var ZeroHash256 = make([]byte, 32)
func (s *StateSuite) SetUpTest(c *C) {
db, _ := ethdb.NewMemDatabase() db, _ := ethdb.NewMemDatabase()
ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "")
ethutil.Config.Db = db ethutil.Config.Db = db
s.state = New(trie.New(db, ""))
state := New(trie.New(db, "")) }
stateObject := state.GetOrNewStateObject([]byte("aa")) func (s *StateSuite) TestSnapshot(c *C) {
stateobjaddr := []byte("aa")
stateObject.SetStorage(ethutil.Big("0"), ethutil.NewValue(42)) storageaddr := ethutil.Big("0")
data1 := ethutil.NewValue(42)
snapshot := state.Copy() data2 := ethutil.NewValue(43)
stateObject = state.GetStateObject([]byte("aa")) // get state object
stateObject.SetStorage(ethutil.Big("0"), ethutil.NewValue(43)) stateObject := s.state.GetOrNewStateObject(stateobjaddr)
// set inital state object value
state.Set(snapshot) stateObject.SetStorage(storageaddr, data1)
// get snapshot of current state
stateObject = state.GetStateObject([]byte("aa")) snapshot := s.state.Copy()
res := stateObject.GetStorage(ethutil.Big("0"))
if !res.Cmp(ethutil.NewValue(42)) { // get state object. is this strictly necessary?
t.Error("Expected storage 0 to be 42", res) stateObject = s.state.GetStateObject(stateobjaddr)
} // set new state object value
stateObject.SetStorage(storageaddr, data2)
// restore snapshot
s.state.Set(snapshot)
// get state object
stateObject = s.state.GetStateObject(stateobjaddr)
// get state storage value
res := stateObject.GetStorage(storageaddr)
c.Assert(data1, DeepEquals, res, Commentf(expectedasbytes, data1, res))
} }