From e22e8b7feffedced7fa1f8809b1828a224ccf774 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 4 Nov 2014 16:39:08 +0100 Subject: [PATCH 01/36] Environment tests --- ethutil/common_test.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ethutil/common_test.go b/ethutil/common_test.go index 2667eaf3a..e6e2d1e8b 100644 --- a/ethutil/common_test.go +++ b/ethutil/common_test.go @@ -2,9 +2,36 @@ package ethutil import ( "math/big" + "os" "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) { ether := CurrencyToString(BigPow(10, 19)) finney := CurrencyToString(BigPow(10, 16)) From 123282e0454179c8728394753501e0de93ac9b96 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 4 Nov 2014 16:41:03 +0100 Subject: [PATCH 02/36] Update variable name to match unit name --- ethutil/common_test.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ethutil/common_test.go b/ethutil/common_test.go index e6e2d1e8b..819ead7cb 100644 --- a/ethutil/common_test.go +++ b/ethutil/common_test.go @@ -36,9 +36,9 @@ func TestCommon(t *testing.T) { ether := CurrencyToString(BigPow(10, 19)) finney := CurrencyToString(BigPow(10, 16)) szabo := CurrencyToString(BigPow(10, 13)) - vito := CurrencyToString(BigPow(10, 10)) - turing := CurrencyToString(BigPow(10, 7)) - eins := CurrencyToString(BigPow(10, 4)) + shannon := CurrencyToString(BigPow(10, 10)) + babbage := CurrencyToString(BigPow(10, 7)) + ada := CurrencyToString(BigPow(10, 4)) wei := CurrencyToString(big.NewInt(10)) if ether != "10 Ether" { @@ -53,16 +53,16 @@ func TestCommon(t *testing.T) { t.Error("Got", szabo) } - if vito != "10 Shannon" { - t.Error("Got", vito) + if shannon != "10 Shannon" { + t.Error("Got", shannon) } - if turing != "10 Babbage" { - t.Error("Got", turing) + if babbage != "10 Babbage" { + t.Error("Got", babbage) } - if eins != "10 Ada" { - t.Error("Got", eins) + if ada != "10 Ada" { + t.Error("Got", ada) } if wei != "10 Wei" { From e7d9bcd36b5809b649dc7f8e6092d5edaa0d155f Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 4 Nov 2014 16:42:28 +0100 Subject: [PATCH 03/36] Added Douglas and Einstein cases --- ethutil/common_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ethutil/common_test.go b/ethutil/common_test.go index 819ead7cb..791ff0a25 100644 --- a/ethutil/common_test.go +++ b/ethutil/common_test.go @@ -33,6 +33,8 @@ func TestWindonziePath(t *testing.T) { } func TestCommon(t *testing.T) { + douglas := CurrencyToString(BigPow(10, 43)) + einstein := CurrencyToString(BigPow(10, 22)) ether := CurrencyToString(BigPow(10, 19)) finney := CurrencyToString(BigPow(10, 16)) szabo := CurrencyToString(BigPow(10, 13)) @@ -41,6 +43,14 @@ func TestCommon(t *testing.T) { ada := CurrencyToString(BigPow(10, 4)) 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" { t.Error("Got", ether) } From b96a59eb28654ba5bc915bfaa21f511fdaa443df Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 4 Nov 2014 16:45:54 +0100 Subject: [PATCH 04/36] Added tests for extra large values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test ā€œEā€ scientific notation formatting --- ethutil/common.go | 1 + ethutil/common_test.go | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ethutil/common.go b/ethutil/common.go index e60f237cf..0a29cac6c 100644 --- a/ethutil/common.go +++ b/ethutil/common.go @@ -66,6 +66,7 @@ func CurrencyToString(num *big.Int) string { denom = "Ada" } + // TODO add comment clarifying expected behavior if len(fin.String()) > 5 { return fmt.Sprintf("%sE%d %s", fin.String()[0:5], len(fin.String())-5, denom) } diff --git a/ethutil/common_test.go b/ethutil/common_test.go index 791ff0a25..056676765 100644 --- a/ethutil/common_test.go +++ b/ethutil/common_test.go @@ -79,3 +79,21 @@ func TestCommon(t *testing.T) { 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) + } +} From 92299b7c2449940c4b98f1aebcd53076780a7704 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 11:23:30 +0100 Subject: [PATCH 05/36] New test coverage for ethutil/path.go --- ethutil/path_test.go | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 ethutil/path_test.go diff --git a/ethutil/path_test.go b/ethutil/path_test.go new file mode 100644 index 000000000..908c94ee7 --- /dev/null +++ b/ethutil/path_test.go @@ -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) + } + +} From e76c58d175dd5b50deb2d5fb4582adae4cd3f7ef Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 13:23:50 +0100 Subject: [PATCH 06/36] New test coverage for ethutil/big.go --- ethutil/big_test.go | 63 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 ethutil/big_test.go diff --git a/ethutil/big_test.go b/ethutil/big_test.go new file mode 100644 index 000000000..b26e58b5c --- /dev/null +++ b/ethutil/big_test.go @@ -0,0 +1,63 @@ +package ethutil + +import ( + "fmt" + "testing" +) + +func TestMisc(t *testing.T) { + a := Big("10") + b := Big("57896044618658097711785492504343953926634992332820282019728792003956564819968") + c := []byte{1, 2, 3, 4} + fmt.Println(b) + z := BitTest(a, 1) + fmt.Println(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) + z := BigToBytes(c, 16) + fmt.Println(y) + fmt.Println(z) +} From 94b0ce84da875bac3847aec73479f1bcd680c1ed Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 13:35:43 +0100 Subject: [PATCH 07/36] Cleanup big_test.go --- ethutil/big_test.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/ethutil/big_test.go b/ethutil/big_test.go index b26e58b5c..bf3c96c6d 100644 --- a/ethutil/big_test.go +++ b/ethutil/big_test.go @@ -1,7 +1,7 @@ package ethutil import ( - "fmt" + "bytes" "testing" ) @@ -9,9 +9,11 @@ func TestMisc(t *testing.T) { a := Big("10") b := Big("57896044618658097711785492504343953926634992332820282019728792003956564819968") c := []byte{1, 2, 3, 4} - fmt.Println(b) z := BitTest(a, 1) - fmt.Println(z) + + if z != true { + t.Error("Expected true got", z) + } U256(a) S256(a) @@ -57,7 +59,15 @@ func TestBigCopy(t *testing.T) { b := BigCopy(a) c := Big("1000000000000") y := BigToBytes(b, 16) + ybytes := []byte{0, 10} z := BigToBytes(c, 16) - fmt.Println(y) - fmt.Println(z) + 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) + } } From 4f009290847dea29e7ea050244418b8b14c3aa61 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 17:04:24 +0100 Subject: [PATCH 08/36] Added byte padding tests --- ethutil/bytes_test.go | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 381efe7a2..27b31c0c8 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -12,3 +12,63 @@ func TestParseData(t *testing.T) { t.Error("Error parsing data") } } + +func TestLeftPadBytes(t *testing.T) { + val := []byte{1, 2, 3, 4} + exp := []byte{0, 0, 0, 0, 1, 2, 3, 4} + + resstd := LeftPadBytes(val, 8) + if bytes.Compare(resstd, exp) != 0 { + t.Errorf("Expected % x Got % x", exp, resstd) + } + + resshrt := LeftPadBytes(val, 2) + if bytes.Compare(resshrt, val) != 0 { + t.Errorf("Expected % x Got % x", exp, resshrt) + } +} + +func TestRightPadBytes(t *testing.T) { + val := []byte{1, 2, 3, 4} + exp := []byte{1, 2, 3, 4, 0, 0, 0, 0} + + resstd := RightPadBytes(val, 8) + if bytes.Compare(resstd, exp) != 0 { + t.Errorf("Expected % x Got % x", exp, resstd) + } + + resshrt := RightPadBytes(val, 2) + if bytes.Compare(resshrt, val) != 0 { + t.Errorf("Expected % x Got % x", exp, resshrt) + } +} + +func TestLeftPadString(t *testing.T) { + val := "test" + + resstd := LeftPadString(val, 8) + + if resstd != "\x30\x30\x30\x30"+val { + t.Errorf("Expected % x Got % x", val, resstd) + } + + resshrt := LeftPadString(val, 2) + + if resshrt != val { + t.Errorf("Expected % x Got % x", val, resshrt) + } +} + +func TestRightPadString(t *testing.T) { + val := "test" + + resstd := RightPadString(val, 8) + if resstd != val+"\x30\x30\x30\x30" { + t.Errorf("Expected % x Got % x", val, resstd) + } + + resshrt := RightPadString(val, 2) + if resshrt != val { + t.Errorf("Expected % x Got % x", val, resshrt) + } +} From cb32f52b9cdc0f44c7c25f956b9de8c62e24f275 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 17:11:40 +0100 Subject: [PATCH 09/36] added test for parsing bytes --- ethutil/bytes_test.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 27b31c0c8..cbc38da77 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -5,7 +5,7 @@ import ( "testing" ) -func TestParseData(t *testing.T) { +func TestParseDataString(t *testing.T) { data := ParseData("hello", "world", "0x0106") exp := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000" if bytes.Compare(data, Hex2Bytes(exp)) != 0 { @@ -13,6 +13,16 @@ func TestParseData(t *testing.T) { } } +func TestParseDataBytes(t *testing.T) { + data := []byte{232, 212, 165, 16, 0} + exp := []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} + + res := ParseData(data) + if bytes.Compare(res, exp) != 0 { + t.Errorf("Expected %x got %x", exp, res) + } +} + func TestLeftPadBytes(t *testing.T) { val := []byte{1, 2, 3, 4} exp := []byte{0, 0, 0, 0, 1, 2, 3, 4} From 92b30cc452d71a84927529b50ac9aa40eb0d550e Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 17:39:26 +0100 Subject: [PATCH 10/36] add tests for ReadVarInt --- ethutil/bytes_test.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index cbc38da77..051f924d4 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -82,3 +82,36 @@ func TestRightPadString(t *testing.T) { t.Errorf("Expected % x Got % x", val, resshrt) } } + +func TestReadVarInt(t *testing.T) { + 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) + + if res8 != exp8 { + t.Errorf("Expected %d | Got %d", exp8, res8) + } + + if res4 != exp4 { + t.Errorf("Expected %d | Got %d", exp4, res4) + } + + if res2 != exp2 { + t.Errorf("Expected %d | Got %d", exp2, res2) + } + + if res1 != exp1 { + t.Errorf("Expected %d | Got %d", exp1, res1) + } +} From ada684e05458cce26a97b245cd96a8fd72523daa Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 17:44:28 +0100 Subject: [PATCH 11/36] added test for BinaryLength --- ethutil/bytes_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 051f924d4..2a106d585 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -115,3 +115,22 @@ func TestReadVarInt(t *testing.T) { t.Errorf("Expected %d | Got %d", exp1, res1) } } + +func TestBinaryLength(t *testing.T) { + data1 := 0 + data2 := 920987656789 + + exp1 := 0 + exp2 := 5 + + res1 := BinaryLength(data1) + res2 := BinaryLength(data2) + + if res1 != exp1 { + t.Errorf("Expected %d got %d", exp1, res1) + } + + if res2 != exp2 { + t.Errorf("Expected %d got %d", exp2, res2) + } +} From 834f8a1dc8b609199f84dcd59a885e77d8f770ba Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 17:48:23 +0100 Subject: [PATCH 12/36] added test for CopyBytes --- ethutil/bytes_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 2a106d585..361df4b9d 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -134,3 +134,12 @@ func TestBinaryLength(t *testing.T) { t.Errorf("Expected %d got %d", exp2, res2) } } + +func TestCopyBytes(t *testing.T) { + data1 := []byte{1, 2, 3, 4} + exp1 := []byte{1, 2, 3, 4} + res1 := CopyBytes(data1) + if bytes.Compare(res1, exp1) != 0 { + t.Errorf("Expected % x got % x", exp1, res1) + } +} From b100546c9dd82a085d4b984275082a61fe3f3fe2 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 18:02:20 +0100 Subject: [PATCH 13/36] add test for Bytes.String() --- ethutil/bytes_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 361df4b9d..82167f054 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -5,6 +5,17 @@ import ( "testing" ) +func TestByteString(t *testing.T) { + var data Bytes + data = []byte{102, 111, 111} + exp := "foo" + res := data.String() + + if res != exp { + t.Errorf("Expected %s got %s", exp, res) + } +} + func TestParseDataString(t *testing.T) { data := ParseData("hello", "world", "0x0106") exp := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000" From 4e15adac6d46acb5b8173050618a1ffac525e528 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 21:59:22 +0100 Subject: [PATCH 14/36] Remove fmt dependency --- ethutil/value_test.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ethutil/value_test.go b/ethutil/value_test.go index 5452a0790..54c8d9fd6 100644 --- a/ethutil/value_test.go +++ b/ethutil/value_test.go @@ -2,7 +2,6 @@ package ethutil import ( "bytes" - "fmt" "math/big" "testing" ) @@ -81,6 +80,10 @@ func TestMath(t *testing.T) { } func TestString(t *testing.T) { - a := NewValue("10") - fmt.Println("VALUE WITH STRING:", a.Int()) + data := "10" + exp := int64(10) + res := NewValue(data).Int() + if res != exp { + t.Errorf("Exprected %d Got res", exp, res) + } } From ab6b9c44aa97a18e37dcd9214eadbdfaa38a4b22 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 22:00:01 +0100 Subject: [PATCH 15/36] Added test for IsHex --- ethutil/bytes_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 82167f054..ee69b38b5 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -16,6 +16,23 @@ func TestByteString(t *testing.T) { } } + +func TestIsHex(t *testing.T) { + data1 := "a9e67e" + exp1 := false + res1 := IsHex(data1) + if exp1 != res1 { + t.Errorf("Expected % x Got % x", exp1, res1) + } + + data2 := "0xa9e67e00" + exp2 := true + res2 := IsHex(data2) + if exp2 != res2 { + t.Errorf("Expected % x Got % x", exp2, res2) + } +} + func TestParseDataString(t *testing.T) { data := ParseData("hello", "world", "0x0106") exp := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000" From 8f94f731a55440341eb02d890fd4eca0fbc32544 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 22:01:09 +0100 Subject: [PATCH 16/36] Reorder tests to match source order --- ethutil/bytes_test.go | 122 +++++++++++++++++++++--------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index ee69b38b5..64483350c 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -17,6 +17,67 @@ func TestByteString(t *testing.T) { } +func TestReadVarInt(t *testing.T) { + 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) + + if res8 != exp8 { + t.Errorf("Expected %d | Got %d", exp8, res8) + } + + if res4 != exp4 { + t.Errorf("Expected %d | Got %d", exp4, res4) + } + + if res2 != exp2 { + t.Errorf("Expected %d | Got %d", exp2, res2) + } + + if res1 != exp1 { + t.Errorf("Expected %d | Got %d", exp1, res1) + } +} + +func TestBinaryLength(t *testing.T) { + data1 := 0 + data2 := 920987656789 + + exp1 := 0 + exp2 := 5 + + res1 := BinaryLength(data1) + res2 := BinaryLength(data2) + + if res1 != exp1 { + t.Errorf("Expected %d got %d", exp1, res1) + } + + if res2 != exp2 { + t.Errorf("Expected %d got %d", exp2, res2) + } +} + +func TestCopyBytes(t *testing.T) { + data1 := []byte{1, 2, 3, 4} + exp1 := []byte{1, 2, 3, 4} + res1 := CopyBytes(data1) + if bytes.Compare(res1, exp1) != 0 { + t.Errorf("Expected % x got % x", exp1, res1) + } +} + func TestIsHex(t *testing.T) { data1 := "a9e67e" exp1 := false @@ -110,64 +171,3 @@ func TestRightPadString(t *testing.T) { t.Errorf("Expected % x Got % x", val, resshrt) } } - -func TestReadVarInt(t *testing.T) { - 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) - - if res8 != exp8 { - t.Errorf("Expected %d | Got %d", exp8, res8) - } - - if res4 != exp4 { - t.Errorf("Expected %d | Got %d", exp4, res4) - } - - if res2 != exp2 { - t.Errorf("Expected %d | Got %d", exp2, res2) - } - - if res1 != exp1 { - t.Errorf("Expected %d | Got %d", exp1, res1) - } -} - -func TestBinaryLength(t *testing.T) { - data1 := 0 - data2 := 920987656789 - - exp1 := 0 - exp2 := 5 - - res1 := BinaryLength(data1) - res2 := BinaryLength(data2) - - if res1 != exp1 { - t.Errorf("Expected %d got %d", exp1, res1) - } - - if res2 != exp2 { - t.Errorf("Expected %d got %d", exp2, res2) - } -} - -func TestCopyBytes(t *testing.T) { - data1 := []byte{1, 2, 3, 4} - exp1 := []byte{1, 2, 3, 4} - res1 := CopyBytes(data1) - if bytes.Compare(res1, exp1) != 0 { - t.Errorf("Expected % x got % x", exp1, res1) - } -} From be96da179a50735ef0ed72d66c5672d89c1a5b66 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 22:01:41 +0100 Subject: [PATCH 17/36] Added tests for FormatData --- ethutil/bytes_test.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 64483350c..08c44eabb 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -127,6 +127,39 @@ func TestLeftPadBytes(t *testing.T) { } } +func TestFormatData(t *testing.T) { + 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) + + if bytes.Compare(res1, exp1) != 0 { + t.Errorf("Expected % x Got % x", exp1, res1) + } + + if bytes.Compare(res2, exp2) != 0 { + t.Errorf("Expected % x Got % x", exp2, res2) + } + + if bytes.Compare(res3, exp3) != 0 { + t.Errorf("Expected % x Got % x", exp3, res3) + } + + if bytes.Compare(res4, exp4) != 0 { + t.Errorf("Expected % x Got % x", exp4, res4) + } +} + func TestRightPadBytes(t *testing.T) { val := []byte{1, 2, 3, 4} exp := []byte{1, 2, 3, 4, 0, 0, 0, 0} From a1d62abca4b07f35f7f80702c9f58bb40e703504 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 22:16:44 +0100 Subject: [PATCH 18/36] Restructure StorageSize string test --- ethutil/size_test.go | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/ethutil/size_test.go b/ethutil/size_test.go index 82aa1c653..9127521cb 100644 --- a/ethutil/size_test.go +++ b/ethutil/size_test.go @@ -1,12 +1,31 @@ package ethutil import ( - "fmt" "testing" ) -func TestSize(t *testing.T) { - fmt.Println(StorageSize(2381273)) - fmt.Println(StorageSize(2192)) - fmt.Println(StorageSize(12)) +func TestStorageSizeString(t *testing.T) { + data1 := 2381273 + data2 := 2192 + data3 := 12 + + exp1 := "2.38 mB" + exp2 := "2.19 kB" + exp3 := "12.00 B" + + res1 := StorageSize(data1).String() + res2 := StorageSize(data2).String() + res3 := StorageSize(data3).String() + + if res1 != exp1 { + t.Errorf("Expected %s got %s", exp1, res1) + } + + if res2 != exp2 { + t.Errorf("Expected %s got %s", exp2, res2) + } + + if res3 != exp3 { + t.Errorf("Expected %s got %s", exp3, res3) + } } From 48a3f0986ccc3caf6405604e3cfe6a3b4de5726c Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 5 Nov 2014 22:21:28 +0100 Subject: [PATCH 19/36] Add coverage for rand --- ethutil/rand_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 ethutil/rand_test.go diff --git a/ethutil/rand_test.go b/ethutil/rand_test.go new file mode 100644 index 000000000..cc64c73e5 --- /dev/null +++ b/ethutil/rand_test.go @@ -0,0 +1,9 @@ +package ethutil + +import ( + "testing" +) + +func TestRandomUint64(t *testing.T) { + RandomUint64() +} From 0a3a148ed4d2fbe29ec7a62f5b15a25f908d7f23 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Thu, 6 Nov 2014 12:35:46 +0100 Subject: [PATCH 20/36] Added more byte tests --- ethutil/bytes_test.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 08c44eabb..c7e696b55 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -16,6 +16,43 @@ func TestByteString(t *testing.T) { } } +/* +func TestDeleteFromByteSlice(t *testing.T) { + data := []byte{1, 2, 3, 4} + slice := []byte{1, 2, 3, 4} + exp := []byte{1, 4} + res := DeleteFromByteSlice(data, slice) + if bytes.Compare(res, exp) != 0 { + t.Errorf("Expected % x Got % x", exp, res) + } +} + +func TestNumberToBytes(t *testing.T) { + data := int(1) + exp := []byte{0, 0, 0, 0, 0, 0, 0, 1} + // TODO this fails. why? + res := NumberToBytes(data, 16) + if bytes.Compare(res, exp) != 0 { + t.Errorf("Expected % x Got % x", exp, res) + } +} +*/ + +func TestBytesToNumber(t *testing.T) { + datasmall := []byte{0, 1} + datalarge := []byte{1, 2, 3} + expsmall := uint64(0) + explarge := uint64(0) + // TODO this fails. why? + ressmall := BytesToNumber(datasmall) + reslarge := BytesToNumber(datalarge) + if ressmall != expsmall { + t.Errorf("Expected %d Got %d", expsmall, ressmall) + } + if reslarge != explarge { + t.Errorf("Expected %d Got %d", explarge, reslarge) + } +} func TestReadVarInt(t *testing.T) { data8 := []byte{1, 2, 3, 4, 5, 6, 7, 8} From 8f3a03c0cc8ef15f561b47ef1c11b02e4f043634 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 12:52:43 +0100 Subject: [PATCH 21/36] Update state tests to use gocheck --- state/state_test.go | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index 737815e90..b15233336 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -1,6 +1,7 @@ package state import ( + . "gopkg.in/check.v1" "testing" "github.com/ethereum/go-ethereum/ethdb" @@ -8,29 +9,41 @@ import ( "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() ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") ethutil.Config.Db = db + s.state = New(trie.New(db, "")) +} - state := New(trie.New(db, "")) - - stateObject := state.GetOrNewStateObject([]byte("aa")) - - stateObject.SetStorage(ethutil.Big("0"), ethutil.NewValue(42)) +func (s *StateSuite) TestSnapshot(c *C) { + data1 := ethutil.NewValue(42) + data2 := ethutil.NewValue(43) + storageaddr := ethutil.Big("0") + stateobjaddr := []byte("aa") - snapshot := state.Copy() + stateObject := s.state.GetOrNewStateObject(stateobjaddr) + stateObject.SetStorage(storageaddr, data1) + snapshot := s.state.Copy() - stateObject = state.GetStateObject([]byte("aa")) - stateObject.SetStorage(ethutil.Big("0"), ethutil.NewValue(43)) + stateObject = s.state.GetStateObject(stateobjaddr) + stateObject.SetStorage(storageaddr, data2) + s.state.Set(snapshot) - state.Set(snapshot) + stateObject = s.state.GetStateObject(stateobjaddr) + res := stateObject.GetStorage(storageaddr) - stateObject = state.GetStateObject([]byte("aa")) - res := stateObject.GetStorage(ethutil.Big("0")) - if !res.Cmp(ethutil.NewValue(42)) { - t.Error("Expected storage 0 to be 42", res) - } + c.Assert(data1, DeepEquals, res, Commentf(expectedasbytes, data1, res)) } From 3c619baec58947aa8b02e4a807a3e837d8fa73fd Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 13:07:24 +0100 Subject: [PATCH 22/36] Add verbose comments to TestSnapshot --- state/state_test.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/state/state_test.go b/state/state_test.go index b15233336..9dd965e95 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -29,20 +29,28 @@ func (s *StateSuite) SetUpTest(c *C) { } func (s *StateSuite) TestSnapshot(c *C) { + stateobjaddr := []byte("aa") + storageaddr := ethutil.Big("0") data1 := ethutil.NewValue(42) data2 := ethutil.NewValue(43) - storageaddr := ethutil.Big("0") - stateobjaddr := []byte("aa") + // get state object stateObject := s.state.GetOrNewStateObject(stateobjaddr) + // set inital state object value stateObject.SetStorage(storageaddr, data1) + // get snapshot of current state snapshot := s.state.Copy() + // get state object. is this strictly necessary? 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)) From cd94b5ffb3c29d72d87c6cd7e439868e11e24b8d Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 15:04:11 +0100 Subject: [PATCH 23/36] Convert value_test to use gocheck --- ethutil/value_test.go | 85 +++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 51 deletions(-) diff --git a/ethutil/value_test.go b/ethutil/value_test.go index 54c8d9fd6..1c62d3e20 100644 --- a/ethutil/value_test.go +++ b/ethutil/value_test.go @@ -1,89 +1,72 @@ package ethutil import ( - "bytes" + checker "gopkg.in/check.v1" "math/big" "testing" ) -func TestValueCmp(t *testing.T) { +func Test(t *testing.T) { checker.TestingT(t) } + +type ValueSuite struct{} + +var _ = checker.Suite(&ValueSuite{}) + +func (s *ValueSuite) TestValueCmp(c *checker.C) { val1 := NewValue("hello") val2 := NewValue("world") - if val1.Cmp(val2) { - t.Error("Expected values not to be equal") - } + c.Assert(val1.Cmp(val2), checker.Equals, false) val3 := NewValue("hello") val4 := NewValue("hello") - if !val3.Cmp(val4) { - t.Error("Expected values to be equal") - } + c.Assert(val3.Cmp(val4), checker.Equals, true) } -func TestValueTypes(t *testing.T) { +func (s *ValueSuite) TestValueTypes(c *checker.C) { str := NewValue("str") num := NewValue(1) inter := NewValue([]interface{}{1}) byt := NewValue([]byte{1, 2, 3, 4}) bigInt := NewValue(big.NewInt(10)) - if str.Str() != "str" { - t.Errorf("expected Str to return 'str', got %s", str.Str()) - } - - if num.Uint() != 1 { - t.Errorf("expected Uint to return '1', got %d", num.Uint()) - } - + strExp := "str" + numExp := uint64(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} - if bytes.Compare(byt.Bytes(), bytExp) != 0 { - t.Errorf("expected Bytes to return '%v', got %v", bytExp, byt.Bytes()) - } - 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}) - it := value.NewIterator() + iter := value.NewIterator() values := []uint64{1, 2, 3} i := 0 - for it.Next() { - if values[i] != it.Value().Uint() { - t.Errorf("Expected %d, got %d", values[i], it.Value().Uint()) - } + for iter.Next() { + c.Assert(values[i], checker.Equals, iter.Value().Uint()) i++ } } -func TestMath(t *testing.T) { - a := NewValue(1) - a.Add(1).Add(1) +func (s *ValueSuite) TestMath(c *checker.C) { + data1 := NewValue(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)) { - t.Error("Expected 3, got", a) - } - - a = NewValue(2) - a.Sub(1).Sub(1) - if !a.DeepCmp(NewValue(0)) { - t.Error("Expected 0, got", a) - } + c.Assert(data1.DeepCmp(exp1), checker.Equals, true) + c.Assert(data2.DeepCmp(exp2), checker.Equals, true) } -func TestString(t *testing.T) { +func (s *ValueSuite) TestString(c *checker.C) { data := "10" exp := int64(10) - res := NewValue(data).Int() - if res != exp { - t.Errorf("Exprected %d Got res", exp, res) - } + c.Assert(NewValue(data).Int(), checker.DeepEquals, exp) } From d9ccbf04dbdcda527c00e561aa0cc97ffde08f86 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 19:05:23 +0100 Subject: [PATCH 24/36] Move test bootstrap to main_test.go --- ethutil/main_test.go | 8 ++++++++ ethutil/size_test.go | 8 ++++++-- ethutil/value_test.go | 3 --- 3 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 ethutil/main_test.go diff --git a/ethutil/main_test.go b/ethutil/main_test.go new file mode 100644 index 000000000..94f34677d --- /dev/null +++ b/ethutil/main_test.go @@ -0,0 +1,8 @@ +package ethutil + +import ( + checker "gopkg.in/check.v1" + "testing" +) + +func Test(t *testing.T) { checker.TestingT(t) } diff --git a/ethutil/size_test.go b/ethutil/size_test.go index 9127521cb..098e41cd4 100644 --- a/ethutil/size_test.go +++ b/ethutil/size_test.go @@ -1,10 +1,14 @@ package ethutil import ( - "testing" + checker "gopkg.in/check.v1" ) -func TestStorageSizeString(t *testing.T) { +type SizeSuite struct{} + +var _ = checker.Suite(&SizeSuite{}) + +func (s *SizeSuite) TestStorageSizeString(c *checker.C) { data1 := 2381273 data2 := 2192 data3 := 12 diff --git a/ethutil/value_test.go b/ethutil/value_test.go index 1c62d3e20..7c58d3b56 100644 --- a/ethutil/value_test.go +++ b/ethutil/value_test.go @@ -3,11 +3,8 @@ package ethutil import ( checker "gopkg.in/check.v1" "math/big" - "testing" ) -func Test(t *testing.T) { checker.TestingT(t) } - type ValueSuite struct{} var _ = checker.Suite(&ValueSuite{}) From bfd1fe977e1a4f921fce6b4ca522b024df0b2733 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 19:05:35 +0100 Subject: [PATCH 25/36] Update test style to checker --- ethutil/size_test.go | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/ethutil/size_test.go b/ethutil/size_test.go index 098e41cd4..e0f28abc5 100644 --- a/ethutil/size_test.go +++ b/ethutil/size_test.go @@ -17,19 +17,7 @@ func (s *SizeSuite) TestStorageSizeString(c *checker.C) { exp2 := "2.19 kB" exp3 := "12.00 B" - res1 := StorageSize(data1).String() - res2 := StorageSize(data2).String() - res3 := StorageSize(data3).String() - - if res1 != exp1 { - t.Errorf("Expected %s got %s", exp1, res1) - } - - if res2 != exp2 { - t.Errorf("Expected %s got %s", exp2, res2) - } - - if res3 != exp3 { - t.Errorf("Expected %s got %s", exp3, res3) - } + c.Assert(StorageSize(data1).String(), checker.Equals, exp1) + c.Assert(StorageSize(data2).String(), checker.Equals, exp2) + c.Assert(StorageSize(data3).String(), checker.Equals, exp3) } From c24d143c9e08f9782d7ad063868ea7c647db2a03 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 19:18:52 +0100 Subject: [PATCH 26/36] Convert rand_test to checker --- ethutil/rand_test.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/ethutil/rand_test.go b/ethutil/rand_test.go index cc64c73e5..c12698538 100644 --- a/ethutil/rand_test.go +++ b/ethutil/rand_test.go @@ -1,9 +1,17 @@ package ethutil import ( - "testing" + checker "gopkg.in/check.v1" ) -func TestRandomUint64(t *testing.T) { - RandomUint64() +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) } From cff0d93105956d716d32535af64ad3154f1628ae Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 19:38:23 +0100 Subject: [PATCH 27/36] Converts bytes_test to checker --- ethutil/bytes_test.go | 181 +++++++++++++++--------------------------- 1 file changed, 65 insertions(+), 116 deletions(-) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index c7e696b55..f334c4f57 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -1,23 +1,24 @@ package ethutil import ( - "bytes" - "testing" + checker "gopkg.in/check.v1" ) -func TestByteString(t *testing.T) { +type BytesSuite struct{} + +var _ = checker.Suite(&BytesSuite{}) + +func (s *BytesSuite) TestByteString(c *checker.C) { var data Bytes data = []byte{102, 111, 111} exp := "foo" res := data.String() - if res != exp { - t.Errorf("Expected %s got %s", exp, res) - } + c.Assert(res, checker.Equals, exp) } /* -func TestDeleteFromByteSlice(t *testing.T) { +func (s *BytesSuite) TestDeleteFromByteSlice(c *checker.C) { data := []byte{1, 2, 3, 4} slice := []byte{1, 2, 3, 4} exp := []byte{1, 4} @@ -27,7 +28,7 @@ func TestDeleteFromByteSlice(t *testing.T) { } } -func TestNumberToBytes(t *testing.T) { +func (s *BytesSuite) TestNumberToBytes(c *checker.C) { data := int(1) exp := []byte{0, 0, 0, 0, 0, 0, 0, 1} // TODO this fails. why? @@ -38,7 +39,7 @@ func TestNumberToBytes(t *testing.T) { } */ -func TestBytesToNumber(t *testing.T) { +func (s *BytesSuite) TestBytesToNumber(c *checker.C) { datasmall := []byte{0, 1} datalarge := []byte{1, 2, 3} expsmall := uint64(0) @@ -46,15 +47,13 @@ func TestBytesToNumber(t *testing.T) { // TODO this fails. why? ressmall := BytesToNumber(datasmall) reslarge := BytesToNumber(datalarge) - if ressmall != expsmall { - t.Errorf("Expected %d Got %d", expsmall, ressmall) - } - if reslarge != explarge { - t.Errorf("Expected %d Got %d", explarge, reslarge) - } + + c.Assert(ressmall, checker.DeepEquals, expsmall) + c.Assert(reslarge, checker.DeepEquals, explarge) + } -func TestReadVarInt(t *testing.T) { +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} @@ -70,24 +69,13 @@ func TestReadVarInt(t *testing.T) { res2 := ReadVarInt(data2) res1 := ReadVarInt(data1) - if res8 != exp8 { - t.Errorf("Expected %d | Got %d", exp8, res8) - } - - if res4 != exp4 { - t.Errorf("Expected %d | Got %d", exp4, res4) - } - - if res2 != exp2 { - t.Errorf("Expected %d | Got %d", exp2, res2) - } - - if res1 != exp1 { - t.Errorf("Expected %d | Got %d", exp1, res1) - } + 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 TestBinaryLength(t *testing.T) { +func (s *BytesSuite) TestBinaryLength(c *checker.C) { data1 := 0 data2 := 920987656789 @@ -97,80 +85,64 @@ func TestBinaryLength(t *testing.T) { res1 := BinaryLength(data1) res2 := BinaryLength(data2) - if res1 != exp1 { - t.Errorf("Expected %d got %d", exp1, res1) - } - - if res2 != exp2 { - t.Errorf("Expected %d got %d", exp2, res2) - } + c.Assert(res1, checker.Equals, exp1) + c.Assert(res2, checker.Equals, exp2) } -func TestCopyBytes(t *testing.T) { +func (s *BytesSuite) TestCopyBytes(c *checker.C) { data1 := []byte{1, 2, 3, 4} exp1 := []byte{1, 2, 3, 4} res1 := CopyBytes(data1) - if bytes.Compare(res1, exp1) != 0 { - t.Errorf("Expected % x got % x", exp1, res1) - } + c.Assert(res1, checker.DeepEquals, exp1) } -func TestIsHex(t *testing.T) { +func (s *BytesSuite) TestIsHex(c *checker.C) { data1 := "a9e67e" exp1 := false res1 := IsHex(data1) - if exp1 != res1 { - t.Errorf("Expected % x Got % x", exp1, res1) - } + c.Assert(res1, checker.DeepEquals, exp1) data2 := "0xa9e67e00" exp2 := true res2 := IsHex(data2) - if exp2 != res2 { - t.Errorf("Expected % x Got % x", exp2, res2) - } + c.Assert(res2, checker.DeepEquals, exp2) + } -func TestParseDataString(t *testing.T) { - data := ParseData("hello", "world", "0x0106") - exp := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000" - if bytes.Compare(data, Hex2Bytes(exp)) != 0 { - t.Error("Error parsing data") - } +func (s *BytesSuite) TestParseDataString(c *checker.C) { + res1 := ParseData("hello", "world", "0x0106") + data := "68656c6c6f000000000000000000000000000000000000000000000000000000776f726c640000000000000000000000000000000000000000000000000000000106000000000000000000000000000000000000000000000000000000000000" + exp1 := Hex2Bytes(data) + c.Assert(res1, checker.DeepEquals, exp1) } -func TestParseDataBytes(t *testing.T) { - data := []byte{232, 212, 165, 16, 0} - exp := []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} +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) - res := ParseData(data) - if bytes.Compare(res, exp) != 0 { - t.Errorf("Expected %x got %x", exp, res) - } } -func TestLeftPadBytes(t *testing.T) { - val := []byte{1, 2, 3, 4} - exp := []byte{0, 0, 0, 0, 1, 2, 3, 4} +func (s *BytesSuite) TestLeftPadBytes(c *checker.C) { + val1 := []byte{1, 2, 3, 4} + exp1 := []byte{0, 0, 0, 0, 1, 2, 3, 4} - resstd := LeftPadBytes(val, 8) - if bytes.Compare(resstd, exp) != 0 { - t.Errorf("Expected % x Got % x", exp, resstd) - } + res1 := LeftPadBytes(val1, 8) + res2 := LeftPadBytes(val1, 2) - resshrt := LeftPadBytes(val, 2) - if bytes.Compare(resshrt, val) != 0 { - t.Errorf("Expected % x Got % x", exp, resshrt) - } + c.Assert(res1, checker.DeepEquals, exp1) + c.Assert(res2, checker.DeepEquals, val1) } -func TestFormatData(t *testing.T) { +func (s *BytesSuite) TestFormatData(c *checker.C) { data1 := "" data2 := "0xa9e67e00" data3 := "a9e67e" data4 := "\"a9e67e00\"" - exp1 := []byte{} + // 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} @@ -180,64 +152,41 @@ func TestFormatData(t *testing.T) { res3 := FormatData(data3) res4 := FormatData(data4) - if bytes.Compare(res1, exp1) != 0 { - t.Errorf("Expected % x Got % x", exp1, res1) - } - - if bytes.Compare(res2, exp2) != 0 { - t.Errorf("Expected % x Got % x", exp2, res2) - } - - if bytes.Compare(res3, exp3) != 0 { - t.Errorf("Expected % x Got % x", exp3, res3) - } - - if bytes.Compare(res4, exp4) != 0 { - t.Errorf("Expected % x Got % x", exp4, res4) - } + c.Assert(res1, checker.IsNil) + c.Assert(res2, checker.DeepEquals, exp2) + c.Assert(res3, checker.DeepEquals, exp3) + c.Assert(res4, checker.DeepEquals, exp4) } -func TestRightPadBytes(t *testing.T) { +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) - if bytes.Compare(resstd, exp) != 0 { - t.Errorf("Expected % x Got % x", exp, resstd) - } - resshrt := RightPadBytes(val, 2) - if bytes.Compare(resshrt, val) != 0 { - t.Errorf("Expected % x Got % x", exp, resshrt) - } + + c.Assert(resstd, checker.DeepEquals, exp) + c.Assert(resshrt, checker.DeepEquals, val) } -func TestLeftPadString(t *testing.T) { +func (s *BytesSuite) TestLeftPadString(c *checker.C) { val := "test" + exp := "\x30\x30\x30\x30" + val resstd := LeftPadString(val, 8) - - if resstd != "\x30\x30\x30\x30"+val { - t.Errorf("Expected % x Got % x", val, resstd) - } - resshrt := LeftPadString(val, 2) - if resshrt != val { - t.Errorf("Expected % x Got % x", val, resshrt) - } + c.Assert(resstd, checker.Equals, exp) + c.Assert(resshrt, checker.Equals, val) } -func TestRightPadString(t *testing.T) { +func (s *BytesSuite) TestRightPadString(c *checker.C) { val := "test" + exp := val + "\x30\x30\x30\x30" resstd := RightPadString(val, 8) - if resstd != val+"\x30\x30\x30\x30" { - t.Errorf("Expected % x Got % x", val, resstd) - } - resshrt := RightPadString(val, 2) - if resshrt != val { - t.Errorf("Expected % x Got % x", val, resshrt) - } + + c.Assert(resstd, checker.Equals, exp) + c.Assert(resshrt, checker.Equals, val) } From 0d1cdd26d657f6559b52332e207e1cc9e7db7c67 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 20:03:50 +0100 Subject: [PATCH 28/36] Update TestNumberToBytes --- ethutil/bytes_test.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index f334c4f57..358df9f83 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -28,16 +28,17 @@ func (s *BytesSuite) TestDeleteFromByteSlice(c *checker.C) { } } +*/ func (s *BytesSuite) TestNumberToBytes(c *checker.C) { - data := int(1) - exp := []byte{0, 0, 0, 0, 0, 0, 0, 1} - // TODO this fails. why? - res := NumberToBytes(data, 16) - if bytes.Compare(res, exp) != 0 { - t.Errorf("Expected % x Got % x", exp, res) - } + // 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{0, 1} From 12e8404f8fb0409c6db2a48ff4cc52c7aa81f72d Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 20:04:03 +0100 Subject: [PATCH 29/36] Fix TestBytestoNumber --- ethutil/bytes_test.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index 358df9f83..d65336631 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -41,16 +41,17 @@ func (s *BytesSuite) TestNumberToBytes(c *checker.C) { } func (s *BytesSuite) TestBytesToNumber(c *checker.C) { - datasmall := []byte{0, 1} - datalarge := []byte{1, 2, 3} - expsmall := uint64(0) - explarge := uint64(0) - // TODO this fails. why? + 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.DeepEquals, expsmall) - c.Assert(reslarge, checker.DeepEquals, explarge) + c.Assert(ressmall, checker.Equals, expsmall) + c.Assert(reslarge, checker.Equals, explarge) } From 5c5df21e3d8768481c2bc1b6e9475099590e10be Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 11 Nov 2014 20:05:27 +0100 Subject: [PATCH 30/36] Update TestDeleteFromByteSlice Still broken --- ethutil/bytes_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ethutil/bytes_test.go b/ethutil/bytes_test.go index d65336631..179a8c7ef 100644 --- a/ethutil/bytes_test.go +++ b/ethutil/bytes_test.go @@ -23,9 +23,8 @@ func (s *BytesSuite) TestDeleteFromByteSlice(c *checker.C) { slice := []byte{1, 2, 3, 4} exp := []byte{1, 4} res := DeleteFromByteSlice(data, slice) - if bytes.Compare(res, exp) != 0 { - t.Errorf("Expected % x Got % x", exp, res) - } + + c.Assert(res, checker.DeepEquals, exp) } */ From 00878e5b6e09e4e5f38857f1abab7b9cbad4b480 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 12 Nov 2014 21:43:25 +0100 Subject: [PATCH 31/36] Convert trie tests to gocheck --- trie/main_test.go | 8 ++ trie/trie_test.go | 275 +++++++++++++++++++--------------------------- 2 files changed, 119 insertions(+), 164 deletions(-) create mode 100644 trie/main_test.go diff --git a/trie/main_test.go b/trie/main_test.go new file mode 100644 index 000000000..f131b83de --- /dev/null +++ b/trie/main_test.go @@ -0,0 +1,8 @@ +package trie + +import ( + checker "gopkg.in/check.v1" + "testing" +) + +func Test(t *testing.T) { checker.TestingT(t) } diff --git a/trie/trie_test.go b/trie/trie_test.go index 5f3975915..5559f807d 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -1,15 +1,13 @@ package trie import ( - "bytes" "encoding/hex" "encoding/json" "fmt" + checker "gopkg.in/check.v1" "io/ioutil" "math/rand" "net/http" - "reflect" - "testing" "time" "github.com/ethereum/go-ethereum/ethutil" @@ -17,6 +15,11 @@ import ( const LONG_WORD = "1234567890abcdefghijklmnopqrstuvwxxzABCEFGHIJKLMNOPQRSTUVWXYZ" +type TrieSuite struct { + db *MemDatabase + trie *Trie +} + type MemDatabase struct { db map[string][]byte } @@ -44,140 +47,97 @@ func NewTrie() (*MemDatabase, *Trie) { return db, New(db, "") } -func TestTrieSync(t *testing.T) { - db, trie := NewTrie() - - trie.Update("dog", LONG_WORD) - if len(db.db) != 0 { - t.Error("Expected no data in database") - } - - trie.Sync() - if len(db.db) == 0 { - t.Error("Expected data to be persisted") - } +func (s *TrieSuite) SetUpTest(c *checker.C) { + s.db, s.trie = NewTrie() } -func TestTrieDirtyTracking(t *testing.T) { - _, trie := NewTrie() - trie.Update("dog", LONG_WORD) - if !trie.cache.IsDirty { - t.Error("Expected trie to be dirty") - } +func (s *TrieSuite) TestTrieSync(c *checker.C) { + s.trie.Update("dog", LONG_WORD) + c.Assert(s.db.db, checker.HasLen, 0, checker.Commentf("Expected no data in database")) + s.trie.Sync() + c.Assert(s.db.db, checker.HasLen, 3) +} - trie.Sync() - if trie.cache.IsDirty { - t.Error("Expected trie not to be dirty") - } +func (s *TrieSuite) TestTrieDirtyTracking(c *checker.C) { + s.trie.Update("dog", LONG_WORD) + c.Assert(s.trie.cache.IsDirty, checker.Equals, true, checker.Commentf("Expected no data in database")) - trie.Update("test", LONG_WORD) - trie.cache.Undo() - if trie.cache.IsDirty { - t.Error("Expected trie not to be dirty") - } + s.trie.Sync() + c.Assert(s.trie.cache.IsDirty, checker.Equals, false, checker.Commentf("Expected trie to be dirty")) + s.trie.Update("test", LONG_WORD) + s.trie.cache.Undo() + c.Assert(s.trie.cache.IsDirty, checker.Equals, false) } -func TestTrieReset(t *testing.T) { - _, trie := NewTrie() - - trie.Update("cat", LONG_WORD) - if len(trie.cache.nodes) == 0 { - t.Error("Expected cached nodes") - } +func (s *TrieSuite) TestTrieReset(c *checker.C) { + s.trie.Update("cat", LONG_WORD) + c.Assert(s.trie.cache.nodes, checker.HasLen, 1, checker.Commentf("Expected cached nodes")) - trie.cache.Undo() - - if len(trie.cache.nodes) != 0 { - t.Error("Expected no nodes after undo") - } + s.trie.cache.Undo() + c.Assert(s.trie.cache.nodes, checker.HasLen, 0, checker.Commentf("Expected no nodes after undo")) } -func TestTrieGet(t *testing.T) { - _, trie := NewTrie() - - trie.Update("cat", LONG_WORD) - x := trie.Get("cat") - if x != LONG_WORD { - t.Error("expected %s, got %s", LONG_WORD, x) - } +func (s *TrieSuite) TestTrieGet(c *checker.C) { + s.trie.Update("cat", LONG_WORD) + x := s.trie.Get("cat") + c.Assert(x, checker.DeepEquals, LONG_WORD) } -func TestTrieUpdating(t *testing.T) { - _, trie := NewTrie() - trie.Update("cat", LONG_WORD) - trie.Update("cat", LONG_WORD+"1") - x := trie.Get("cat") - if x != LONG_WORD+"1" { - t.Error("expected %S, got %s", LONG_WORD+"1", x) - } +func (s *TrieSuite) TestTrieUpdating(c *checker.C) { + s.trie.Update("cat", LONG_WORD) + s.trie.Update("cat", LONG_WORD+"1") + x := s.trie.Get("cat") + c.Assert(x, checker.DeepEquals, LONG_WORD+"1") } -func TestTrieCmp(t *testing.T) { +func (s *TrieSuite) TestTrieCmp(c *checker.C) { _, trie1 := NewTrie() _, trie2 := NewTrie() trie1.Update("doge", LONG_WORD) trie2.Update("doge", LONG_WORD) - if !trie1.Cmp(trie2) { - t.Error("Expected tries to be equal") - } + c.Assert(trie1, checker.DeepEquals, trie2) trie1.Update("dog", LONG_WORD) trie2.Update("cat", LONG_WORD) - if trie1.Cmp(trie2) { - t.Errorf("Expected tries not to be equal %x %x", trie1.Root, trie2.Root) - } + c.Assert(trie1, checker.Not(checker.DeepEquals), trie2) } -func TestTrieDelete(t *testing.T) { - _, trie := NewTrie() - trie.Update("cat", LONG_WORD) - exp := trie.Root - trie.Update("dog", LONG_WORD) - trie.Delete("dog") - if !reflect.DeepEqual(exp, trie.Root) { - t.Errorf("Expected tries to be equal %x : %x", exp, trie.Root) - } - - trie.Update("dog", LONG_WORD) - exp = trie.Root - trie.Update("dude", LONG_WORD) - trie.Delete("dude") - if !reflect.DeepEqual(exp, trie.Root) { - t.Errorf("Expected tries to be equal %x : %x", exp, trie.Root) - } +func (s *TrieSuite) TestTrieDelete(c *checker.C) { + s.trie.Update("cat", LONG_WORD) + exp := s.trie.Root + s.trie.Update("dog", LONG_WORD) + s.trie.Delete("dog") + c.Assert(s.trie.Root, checker.DeepEquals, exp) + + s.trie.Update("dog", LONG_WORD) + exp = s.trie.Root + s.trie.Update("dude", LONG_WORD) + s.trie.Delete("dude") + c.Assert(s.trie.Root, checker.DeepEquals, exp) } -func TestTrieDeleteWithValue(t *testing.T) { - _, trie := NewTrie() - trie.Update("c", LONG_WORD) - exp := trie.Root - trie.Update("ca", LONG_WORD) - trie.Update("cat", LONG_WORD) - trie.Delete("ca") - trie.Delete("cat") - if !reflect.DeepEqual(exp, trie.Root) { - t.Errorf("Expected tries to be equal %x : %x", exp, trie.Root) - } - +func (s *TrieSuite) TestTrieDeleteWithValue(c *checker.C) { + s.trie.Update("c", LONG_WORD) + exp := s.trie.Root + s.trie.Update("ca", LONG_WORD) + s.trie.Update("cat", LONG_WORD) + s.trie.Delete("ca") + s.trie.Delete("cat") + c.Assert(s.trie.Root, checker.DeepEquals, exp) } -func TestTriePurge(t *testing.T) { - _, trie := NewTrie() - trie.Update("c", LONG_WORD) - trie.Update("ca", LONG_WORD) - trie.Update("cat", LONG_WORD) - - lenBefore := len(trie.cache.nodes) - it := trie.NewIterator() - if num := it.Purge(); num != 3 { - t.Errorf("Expected purge to return 3, got %d", num) - } +func (s *TrieSuite) TestTriePurge(c *checker.C) { + s.trie.Update("c", LONG_WORD) + s.trie.Update("ca", LONG_WORD) + s.trie.Update("cat", LONG_WORD) - if lenBefore == len(trie.cache.nodes) { - t.Errorf("Expected cached nodes to be deleted") - } + lenBefore := len(s.trie.cache.nodes) + it := s.trie.NewIterator() + num := it.Purge() + c.Assert(num, checker.Equals, 3) + c.Assert(len(s.trie.cache.nodes), checker.Equals, lenBefore) } func h(str string) string { @@ -199,23 +159,23 @@ func get(in string) (out string) { return } -type Test struct { +type TrieTest struct { Name string In map[string]string Root string } -func CreateTest(name string, data []byte) (Test, error) { - t := Test{Name: name} +func CreateTest(name string, data []byte) (TrieTest, error) { + t := TrieTest{Name: name} err := json.Unmarshal(data, &t) if err != nil { - return Test{}, fmt.Errorf("%v", err) + return TrieTest{}, fmt.Errorf("%v", err) } return t, nil } -func CreateTests(uri string, cb func(Test)) map[string]Test { +func CreateTests(uri string, cb func(TrieTest)) map[string]TrieTest { resp, err := http.Get(uri) if err != nil { panic(err) @@ -230,7 +190,7 @@ func CreateTests(uri string, cb func(Test)) map[string]Test { panic(err) } - tests := make(map[string]Test) + tests := make(map[string]TrieTest) for name, testData := range objmap { test, err := CreateTest(name, *testData) if err != nil { @@ -274,7 +234,7 @@ func RandomData() [][]string { const MaxTest = 1000 // This test insert data in random order and seeks to find indifferences between the different tries -func TestRegression(t *testing.T) { +func (s *TrieSuite) TestRegression(c *checker.C) { rand.Seed(time.Now().Unix()) roots := make(map[string]int) @@ -290,34 +250,33 @@ func TestRegression(t *testing.T) { roots[string(trie.Root.([]byte))] += 1 } - if len(roots) > 1 { - for root, num := range roots { - t.Errorf("%x => %d\n", root, num) - } - } + c.Assert(len(roots) <= 1, checker.Equals, true) + // if len(roots) > 1 { + // for root, num := range roots { + // t.Errorf("%x => %d\n", root, num) + // } + // } } -func TestDelete(t *testing.T) { - _, trie := NewTrie() - - trie.Update("a", "jeffreytestlongstring") - trie.Update("aa", "otherstring") - trie.Update("aaa", "othermorestring") - trie.Update("aabbbbccc", "hithere") - trie.Update("abbcccdd", "hstanoehutnaheoustnh") - trie.Update("rnthaoeuabbcccdd", "hstanoehutnaheoustnh") - trie.Update("rneuabbcccdd", "hstanoehutnaheoustnh") - trie.Update("rneuabboeusntahoeucccdd", "hstanoehutnaheoustnh") - trie.Update("rnxabboeusntahoeucccdd", "hstanoehutnaheoustnh") - trie.Delete("aaboaestnuhbccc") - trie.Delete("a") - trie.Update("a", "nthaonethaosentuh") - trie.Update("c", "shtaosntehua") - trie.Delete("a") - trie.Update("aaaa", "testmegood") +func (s *TrieSuite) TestDelete(c *checker.C) { + s.trie.Update("a", "jeffreytestlongstring") + s.trie.Update("aa", "otherstring") + s.trie.Update("aaa", "othermorestring") + s.trie.Update("aabbbbccc", "hithere") + s.trie.Update("abbcccdd", "hstanoehutnaheoustnh") + s.trie.Update("rnthaoeuabbcccdd", "hstanoehutnaheoustnh") + s.trie.Update("rneuabbcccdd", "hstanoehutnaheoustnh") + s.trie.Update("rneuabboeusntahoeucccdd", "hstanoehutnaheoustnh") + s.trie.Update("rnxabboeusntahoeucccdd", "hstanoehutnaheoustnh") + s.trie.Delete("aaboaestnuhbccc") + s.trie.Delete("a") + s.trie.Update("a", "nthaonethaosentuh") + s.trie.Update("c", "shtaosntehua") + s.trie.Delete("a") + s.trie.Update("aaaa", "testmegood") _, t2 := NewTrie() - trie.NewIterator().Each(func(key string, v *ethutil.Value) { + s.trie.NewIterator().Each(func(key string, v *ethutil.Value) { if key == "aaaa" { t2.Update(key, v.Str()) } else { @@ -325,27 +284,22 @@ func TestDelete(t *testing.T) { } }) - a := ethutil.NewValue(trie.Root).Bytes() + a := ethutil.NewValue(s.trie.Root).Bytes() b := ethutil.NewValue(t2.Root).Bytes() - if bytes.Compare(a, b) != 0 { - t.Errorf("Expected %x and %x to be equal", a, b) - } + c.Assert(a, checker.DeepEquals, b) } -func TestTerminator(t *testing.T) { +func (s *TrieSuite) TestTerminator(c *checker.C) { key := CompactDecode("hello") - if !HasTerm(key) { - t.Errorf("Expected %v to have a terminator", key) - } + c.Assert(HasTerm(key), checker.Equals, true, checker.Commentf("Expected %v to have a terminator", key)) } -func TestIt(t *testing.T) { - _, trie := NewTrie() - trie.Update("cat", "cat") - trie.Update("doge", "doge") - trie.Update("wallace", "wallace") - it := trie.Iterator() +func (s *TrieSuite) TestIt(c *checker.C) { + s.trie.Update("cat", "cat") + s.trie.Update("doge", "doge") + s.trie.Update("wallace", "wallace") + it := s.trie.Iterator() inputs := []struct { In, Out string @@ -361,23 +315,16 @@ func TestIt(t *testing.T) { for _, test := range inputs { res := string(it.Next(test.In)) - if res != test.Out { - t.Errorf(test.In, "failed. Got", res, "Expected", test.Out) - } + c.Assert(res, checker.Equals, test.Out) } } -func TestBeginsWith(t *testing.T) { +func (s *TrieSuite) TestBeginsWith(c *checker.C) { a := CompactDecode("hello") b := CompactDecode("hel") - if BeginsWith(a, b) { - t.Errorf("Expected %x to begin with %x", a, b) - } - - if BeginsWith(b, a) { - t.Errorf("Expected %x not to begin with %x", b, a) - } + c.Assert(BeginsWith(a, b), checker.Equals, false) + c.Assert(BeginsWith(b, a), checker.Equals, true) } /* From 6eacc8eab9ad605c76a936361c0015d1ba905da1 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 12 Nov 2014 21:52:37 +0100 Subject: [PATCH 32/36] eth-go -> go-ethereum --- chain/asm.go | 2 +- p2p/connection.go | 2 +- p2p/message.go | 2 +- p2p/messenger_test.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/chain/asm.go b/chain/asm.go index 4ca6c7fdf..5a2e961ac 100644 --- a/chain/asm.go +++ b/chain/asm.go @@ -4,8 +4,8 @@ import ( "fmt" "math/big" + "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/vm" - "github.com/ethgo.old/ethutil" ) func Disassemble(script []byte) (asm []string) { diff --git a/p2p/connection.go b/p2p/connection.go index e999cbe55..be366235d 100644 --- a/p2p/connection.go +++ b/p2p/connection.go @@ -6,7 +6,7 @@ import ( "net" "time" - "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/go-ethereum/ethutil" ) type Connection struct { diff --git a/p2p/message.go b/p2p/message.go index 4886eaa1f..446e74dff 100644 --- a/p2p/message.go +++ b/p2p/message.go @@ -2,7 +2,7 @@ package p2p import ( // "fmt" - "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/go-ethereum/ethutil" ) type MsgCode uint8 diff --git a/p2p/messenger_test.go b/p2p/messenger_test.go index bc21d34ba..f56e4ab2b 100644 --- a/p2p/messenger_test.go +++ b/p2p/messenger_test.go @@ -3,7 +3,7 @@ package p2p import ( // "fmt" "bytes" - "github.com/ethereum/eth-go/ethutil" + "github.com/ethereum/go-ethereum/ethutil" "testing" "time" ) From bd9bd4abed09a1ac7a686e9a61d925d1a69445a6 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 12 Nov 2014 22:02:39 +0100 Subject: [PATCH 33/36] Reorg state tests --- state/main_test.go | 8 ++++++++ state/state_test.go | 15 +++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 state/main_test.go diff --git a/state/main_test.go b/state/main_test.go new file mode 100644 index 000000000..973a7c373 --- /dev/null +++ b/state/main_test.go @@ -0,0 +1,8 @@ +package state + +import ( + checker "gopkg.in/check.v1" + "testing" +) + +func Test(t *testing.T) { checker.TestingT(t) } diff --git a/state/state_test.go b/state/state_test.go index 9dd965e95..8942f51ec 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -1,34 +1,29 @@ package state import ( - . "gopkg.in/check.v1" - "testing" + checker "gopkg.in/check.v1" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/trie" ) -func Test(t *testing.T) { TestingT(t) } - type StateSuite struct { state *State } -var _ = Suite(&StateSuite{}) - -const expectedasbytes = "Expected % x Got % x" +var _ = checker.Suite(&StateSuite{}) // var ZeroHash256 = make([]byte, 32) -func (s *StateSuite) SetUpTest(c *C) { +func (s *StateSuite) SetUpTest(c *checker.C) { db, _ := ethdb.NewMemDatabase() ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") ethutil.Config.Db = db s.state = New(trie.New(db, "")) } -func (s *StateSuite) TestSnapshot(c *C) { +func (s *StateSuite) TestSnapshot(c *checker.C) { stateobjaddr := []byte("aa") storageaddr := ethutil.Big("0") data1 := ethutil.NewValue(42) @@ -53,5 +48,5 @@ func (s *StateSuite) TestSnapshot(c *C) { // get state storage value res := stateObject.GetStorage(storageaddr) - c.Assert(data1, DeepEquals, res, Commentf(expectedasbytes, data1, res)) + c.Assert(data1, checker.DeepEquals, res) } From fa59db7595645f1ea9465cf46690379130c89370 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 12 Nov 2014 22:03:03 +0100 Subject: [PATCH 34/36] Add initial state/TestDump test --- state/state_test.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/state/state_test.go b/state/state_test.go index 8942f51ec..825d21fcc 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -16,6 +16,15 @@ var _ = checker.Suite(&StateSuite{}) // var ZeroHash256 = make([]byte, 32) +func (s *StateSuite) TestDump(c *checker.C) { + key := []byte{0x01} + value := "foo" + node := []interface{}{key, value} + s.state.Trie.Put(node) + dump := s.state.Dump() + c.Assert(dump, checker.NotNil) +} + func (s *StateSuite) SetUpTest(c *checker.C) { db, _ := ethdb.NewMemDatabase() ethutil.ReadConfig(".ethtest", "/tmp/ethtest", "") From 461324a801afde2a9fe92b8303e510fd7e02b1f2 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Wed, 12 Nov 2014 22:08:56 +0100 Subject: [PATCH 35/36] Remove references to mutan obscuren/mutan is deprecated --- vm/vm_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/vm/vm_test.go b/vm/vm_test.go index f5d77cbff..0e1f2f93d 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -14,7 +14,7 @@ import ( "github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/state" "github.com/ethereum/go-ethereum/trie" - "github.com/obscuren/mutan" + // "github.com/obscuren/mutan" ) type TestEnv struct{} @@ -67,9 +67,9 @@ func setup(level logger.LogLevel, typ Type) (*Closure, VirtualMachine) { var big9 = ethutil.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000009") func TestDebugVm(t *testing.T) { - if mutan.Version < "0.6" { - t.Skip("skipping for mutan version", mutan.Version, " < 0.6") - } + // if mutan.Version < "0.6" { + // t.Skip("skipping for mutan version", mutan.Version, " < 0.6") + // } closure, vm := setup(logger.DebugLevel, DebugVmTy) ret, _, e := closure.Call(vm, nil) @@ -82,9 +82,9 @@ func TestDebugVm(t *testing.T) { } func TestVm(t *testing.T) { - if mutan.Version < "0.6" { - t.Skip("skipping for mutan version", mutan.Version, " < 0.6") - } + // if mutan.Version < "0.6" { + // t.Skip("skipping for mutan version", mutan.Version, " < 0.6") + // } closure, vm := setup(logger.DebugLevel, StandardVmTy) ret, _, e := closure.Call(vm, nil) From 313cfba7d43529db647789ae826bc426d9da7de3 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Thu, 13 Nov 2014 04:40:21 +0100 Subject: [PATCH 36/36] convert trie encoding tests to checker --- trie/encoding_test.go | 67 +++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/trie/encoding_test.go b/trie/encoding_test.go index c9bc113c9..193c898f3 100644 --- a/trie/encoding_test.go +++ b/trie/encoding_test.go @@ -1,68 +1,59 @@ package trie import ( - "bytes" - "fmt" - "testing" + checker "gopkg.in/check.v1" ) -func TestCompactEncode(t *testing.T) { +type TrieEncodingSuite struct{} + +var _ = checker.Suite(&TrieEncodingSuite{}) + +func (s *TrieEncodingSuite) TestCompactEncode(c *checker.C) { + // even compact encode test1 := []byte{1, 2, 3, 4, 5} - if res := CompactEncode(test1); res != "\x11\x23\x45" { - t.Error(fmt.Sprintf("even compact encode failed. Got: %q", res)) - } + res1 := CompactEncode(test1) + c.Assert(res1, checker.Equals, "\x11\x23\x45") + // odd compact encode test2 := []byte{0, 1, 2, 3, 4, 5} - if res := CompactEncode(test2); res != "\x00\x01\x23\x45" { - t.Error(fmt.Sprintf("odd compact encode failed. Got: %q", res)) - } + res2 := CompactEncode(test2) + c.Assert(res2, checker.Equals, "\x00\x01\x23\x45") + //odd terminated compact encode test3 := []byte{0, 15, 1, 12, 11, 8 /*term*/, 16} - if res := CompactEncode(test3); res != "\x20\x0f\x1c\xb8" { - t.Error(fmt.Sprintf("odd terminated compact encode failed. Got: %q", res)) - } + res3 := CompactEncode(test3) + c.Assert(res3, checker.Equals, "\x20\x0f\x1c\xb8") + // even terminated compact encode test4 := []byte{15, 1, 12, 11, 8 /*term*/, 16} - if res := CompactEncode(test4); res != "\x3f\x1c\xb8" { - t.Error(fmt.Sprintf("even terminated compact encode failed. Got: %q", res)) - } + res4 := CompactEncode(test4) + c.Assert(res4, checker.Equals, "\x3f\x1c\xb8") } -func TestCompactHexDecode(t *testing.T) { +func (s *TrieEncodingSuite) TestCompactHexDecode(c *checker.C) { exp := []byte{7, 6, 6, 5, 7, 2, 6, 2, 16} res := CompactHexDecode("verb") - - if !bytes.Equal(res, exp) { - t.Error("Error compact hex decode. Expected", exp, "got", res) - } + c.Assert(res, checker.DeepEquals, exp) } -func TestCompactDecode(t *testing.T) { +func (s *TrieEncodingSuite) TestCompactDecode(c *checker.C) { + // odd compact decode exp := []byte{1, 2, 3, 4, 5} res := CompactDecode("\x11\x23\x45") + c.Assert(res, checker.DeepEquals, exp) - if !bytes.Equal(res, exp) { - t.Error("odd compact decode. Expected", exp, "got", res) - } - + // even compact decode exp = []byte{0, 1, 2, 3, 4, 5} res = CompactDecode("\x00\x01\x23\x45") + c.Assert(res, checker.DeepEquals, exp) - if !bytes.Equal(res, exp) { - t.Error("even compact decode. Expected", exp, "got", res) - } - + // even terminated compact decode exp = []byte{0, 15, 1, 12, 11, 8 /*term*/, 16} res = CompactDecode("\x20\x0f\x1c\xb8") + c.Assert(res, checker.DeepEquals, exp) - if !bytes.Equal(res, exp) { - t.Error("even terminated compact decode. Expected", exp, "got", res) - } - + // even terminated compact decode exp = []byte{15, 1, 12, 11, 8 /*term*/, 16} res = CompactDecode("\x3f\x1c\xb8") - - if !bytes.Equal(res, exp) { - t.Error("even terminated compact decode. Expected", exp, "got", res) - } + c.Assert(res, checker.DeepEquals, exp) }