From 63f3f95c26d0b0c6a2dcf137126f762e7dd953df Mon Sep 17 00:00:00 2001
From: zramsay <zach@monax.io>
Date: Tue, 29 Nov 2016 13:06:22 -0500
Subject: [PATCH] genesis test: re-write from scratch

---
 genesis/gen_test.go | 237 +++++++++++++++++++++++++-------------------
 1 file changed, 133 insertions(+), 104 deletions(-)

diff --git a/genesis/gen_test.go b/genesis/gen_test.go
index 3a663fd6..30d5f9c5 100644
--- a/genesis/gen_test.go
+++ b/genesis/gen_test.go
@@ -2,132 +2,161 @@ package genesis
 
 import (
 	"bytes"
-	"encoding/hex"
-	"fmt"
 	"io/ioutil"
 	"os"
-	"path"
+	"path/filepath"
 	"testing"
-
-	stypes "github.com/eris-ltd/eris-db/manager/eris-mint/state/types"
-	ptypes "github.com/eris-ltd/eris-db/permission/types"
-	// XXX
-	//"github.com/eris-ltd/mint-client/Godeps/_workspace/src/github.com/eris-ltd/tendermint/types"
 )
 
-var DirFlag string
-
-func MakeGenesisDocFromFile(genDocFile string) *stypes.GenesisDoc {
-	jsonBlob, err := ioutil.ReadFile(genDocFile)
-	if err != nil {
-		fmt.Sprintf("Couldn't read GenesisDoc file: %v", err)
-		os.Exit(1)
-	}
-	return stypes.GenesisDocFromJSON(jsonBlob)
-}
-
-type GenDoc struct {
-	pubkeys []string
-	amts    []int
-	names   []string
-	perms   []int
-	setbits []int
-}
-
-var csv1 = GenDoc{
-	pubkeys: []string{"3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961C09", "3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961C10", "3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961Cff", "3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961Cab"},
-	amts:    []int{10, 100, 1000, 100000},
-	names:   []string{"", "ok", "hi", "hm"},
-	perms:   []int{1, 2, 128, 130},
-	setbits: []int{1, 2, 128, 131},
-}
-
-var csv2 = GenDoc{
-	pubkeys: []string{"3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961C09", "3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961C10", "3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961Cff", "3D64963C2EE465AA3866DAF420FA1D35F54A1C2DDCF4524C587CD7295D961Cab"},
-	amts:    nil,
-	names:   nil,
-	perms:   nil,
-	setbits: nil,
-}
-
-func csv1String() string {
-	buf := new(bytes.Buffer)
-	for i, pub := range csv1.pubkeys {
-		buf.WriteString(fmt.Sprintf("%s,%d,%s,%d,%d\n", pub, csv1.amts[i], csv1.names[i], csv1.perms[i], csv1.setbits[i]))
-	}
-	return buf.String()
-}
-
-func csv2String() string {
-	buf := new(bytes.Buffer)
-	for _, pub := range csv2.pubkeys {
-		buf.WriteString(fmt.Sprintf("%s,\n", pub))
-	}
-	return buf.String()
-}
-
-func testKnownCSV(csvFile string, csv GenDoc) error {
-	chainID := "test_chainID"
-
-	if err := ioutil.WriteFile(path.Join(DirFlag, "accounts.csv"), []byte(csvFile), 0600); err != nil {
-		return err
-	}
-
-	genBytes, err := coreKnown(chainID, path.Join(DirFlag, "accounts.csv"), "")
-	if err != nil {
-		return err
-	}
-
-	if err := ioutil.WriteFile(path.Join(DirFlag, "genesis.json"), genBytes, 0600); err != nil {
-		return err
-	}
-
-	gDoc := MakeGenesisDocFromFile(path.Join(DirFlag, "genesis.json"))
-
-	N := len(csv.pubkeys)
-	if len(gDoc.Validators) != N {
-		return fmt.Errorf("Expected %d validators. Got %d", N, len(gDoc.Validators))
-	}
-
-	for i, pub := range csv.pubkeys {
-		pubBytes, _ := hex.DecodeString(pub)
-		if !bytes.Equal(gDoc.Validators[i].PubKey[:], pubBytes) {
-			return fmt.Errorf("failed to find validator %d:%X in genesis.json", i, pub)
+// set the chain ID
+var chainID string = "genesis-file-maker-test"
+
+var genesisFileExpected string = `{
+	"genesis_time": "0001-01-01T00:00:00.000Z",
+	"chain_id": "genesis-file-maker-test",
+	"params": null,
+	"accounts": [
+		{
+			"address": "74417C1BEFB3938B71B22B202050A4C6591FFCF6",
+			"amount": 9999999999,
+			"name": "genesis-file-maker-test_developer_000",
+			"permissions": {
+				"base": {
+					"perms": 14430,
+					"set": 16383
+				},
+				"roles": []
+			}
+		},
+		{
+			"address": "0C9DAEA4046491A661FCE0B41B0CAA2AD3415268",
+			"amount": 99999999999999,
+			"name": "genesis-file-maker-test_full_000",
+			"permissions": {
+				"base": {
+					"perms": 16383,
+					"set": 16383
+				},
+				"roles": []
+			}
+		},
+		{
+			"address": "E1BD50A1B90A15861F5CF0F182D291F556B21A86",
+			"amount": 9999999999,
+			"name": "genesis-file-maker-test_participant_000",
+			"permissions": {
+				"base": {
+					"perms": 2118,
+					"set": 16383
+				},
+				"roles": []
+			}
+		},
+		{
+			"address": "A6C8E2DE652DB8ADB4036293DC21F8FE389D77C2",
+			"amount": 9999999999,
+			"name": "genesis-file-maker-test_root_000",
+			"permissions": {
+				"base": {
+					"perms": 16383,
+					"set": 16383
+				},
+				"roles": []
+			}
+		},
+		{
+			"address": "E96CB7910001320B6F1E2266A8431D5E98FF0183",
+			"amount": 9999999999,
+			"name": "genesis-file-maker-test_validator_000",
+			"permissions": {
+				"base": {
+					"perms": 32,
+					"set": 16383
+				},
+				"roles": []
+			}
 		}
-		if len(csv.amts) > 0 && gDoc.Accounts[i].Amount != int64(csv.amts[i]) {
-			return fmt.Errorf("amts dont match. got %d, expected %d", gDoc.Accounts[i].Amount, csv.amts[i])
+	],
+	"validators": [
+		{
+			"pub_key": [
+				1,
+				"238E1A77CC7CDCD13F4D77841F1FE4A46A77DB691EC89718CD0D4CB3409F61D2"
+			],
+			"amount": 9999999999,
+			"name": "genesis-file-maker-test_full_000",
+			"unbond_to": [
+				{
+					"address": "0C9DAEA4046491A661FCE0B41B0CAA2AD3415268",
+					"amount": 9999999999
+				}
+			]
+		},
+		{
+			"pub_key": [
+				1,
+				"7F53D78C526F96C87ACBD0D2B9DB2E9FC176981623D26B1DB1CF59748EE9F4CF"
+			],
+			"amount": 9999999998,
+			"name": "genesis-file-maker-test_validator_000",
+			"unbond_to": [
+				{
+					"address": "E96CB7910001320B6F1E2266A8431D5E98FF0183",
+					"amount": 9999999998
+				}
+			]
 		}
-		if len(csv.perms) > 0 && gDoc.Accounts[i].Permissions.Base.Perms != ptypes.PermFlag(csv.perms[i]) {
-			return fmt.Errorf("perms dont match. got %d, expected %d", gDoc.Accounts[i].Permissions.Base.Perms, csv.perms[i])
-		}
-		if len(csv.setbits) > 0 && gDoc.Accounts[i].Permissions.Base.SetBit != ptypes.PermFlag(csv.setbits[i]) {
-			return fmt.Errorf("setbits dont match. got %d, expected %d", gDoc.Accounts[i].Permissions.Base.SetBit, csv.setbits[i])
-		}
-	}
-	return nil
-}
+	]
+}`
+
+var accountsCSV string = `F0BD5CE45D306D61C9AB73CE5268C2B59D52CAF7127EF0E3B65523302254350A,9999999999,genesis-file-maker-test_developer_000,14430,16383
+238E1A77CC7CDCD13F4D77841F1FE4A46A77DB691EC89718CD0D4CB3409F61D2,99999999999999,genesis-file-maker-test_full_000,16383,16383
+E37A655E560D53721C9BB06BA742398323504DFE2EB2C67E71F8D16E71E0471B,9999999999,genesis-file-maker-test_participant_000,2118,16383
+EC0E38CC8308EC9E720EE839242A7BC5C781D1F852E962FAC5A8E0599CE5B224,9999999999,genesis-file-maker-test_root_000,16383,16383
+7F53D78C526F96C87ACBD0D2B9DB2E9FC176981623D26B1DB1CF59748EE9F4CF,9999999999,genesis-file-maker-test_validator_000,32,16383`
+
+var validatorsCSV string = `238E1A77CC7CDCD13F4D77841F1FE4A46A77DB691EC89718CD0D4CB3409F61D2,9999999999,genesis-file-maker-test_full_000,16383,16383
+7F53D78C526F96C87ACBD0D2B9DB2E9FC176981623D26B1DB1CF59748EE9F4CF,9999999998,genesis-file-maker-test_validator_000,32,16383`
 
 func TestKnownCSV(t *testing.T) {
 	// make temp dir
-	dir, err := ioutil.TempDir(os.TempDir(), "mintgen-test")
+	dir, err := ioutil.TempDir(os.TempDir(), "genesis-file-maker-test")
 	if err != nil {
 		t.Fatal(err)
 	}
 
 	defer func() {
 		//cleanup
-		os.RemoveAll(DirFlag)
+		os.RemoveAll(dir)
 		if err != nil {
 			t.Fatal(err)
 		}
 
 	}()
 
-	DirFlag = dir
-	if err = testKnownCSV(csv1String(), csv1); err != nil {
-		return
+	// set the filepaths to be written to
+	accountsCSVpath := filepath.Join(dir, "accounts.csv")
+	validatorsCSVpath := filepath.Join(dir, "validators.csv")
+
+	// write the accounts.csv
+	if err := ioutil.WriteFile(accountsCSVpath, []byte(accountsCSV), 0600); err != nil {
+		t.Fatal(err)
 	}
-	if err = testKnownCSV(csv2String(), csv2); err != nil {
-		return
+
+	// write the validators.csv
+	if err := ioutil.WriteFile(validatorsCSVpath, []byte(validatorsCSV), 0600); err != nil {
+		t.Fatal(err)
 	}
+
+	// create the genesis file
+	genesisFileWritten, err := GenerateKnown(chainID, accountsCSVpath, validatorsCSVpath)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	// compare
+	if !bytes.Equal([]byte(genesisFileExpected), []byte(genesisFileWritten)) {
+		t.Fatalf("Bad genesis file: got (%s), expected (%s)", genesisFileWritten, genesisFileExpected)
+	}
+
 }
-- 
GitLab