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