github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/genesis/spec/genesis_spec_test.go (about) 1 package spec 2 3 import ( 4 "testing" 5 6 "github.com/hyperledger/burrow/acm/balance" 7 "github.com/hyperledger/burrow/crypto" 8 "github.com/hyperledger/burrow/keys" 9 "github.com/hyperledger/burrow/logging" 10 "github.com/hyperledger/burrow/permission" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestGenesisSpec_GenesisDoc(t *testing.T) { 16 keyClient := keys.NewLocalKeyClient(keys.NewMemoryKeyStore(), logging.NewNoopLogger()) 17 18 // Try a spec with a single account/validator 19 amtBonded := uint64(100) 20 genesisSpec := GenesisSpec{ 21 Accounts: []TemplateAccount{{ 22 Amounts: balance.New().Power(amtBonded), 23 }}, 24 } 25 26 genesisDoc, err := genesisSpec.GenesisDoc(keyClient, crypto.CurveTypeEd25519) 27 require.NoError(t, err) 28 require.Len(t, genesisDoc.Accounts, 1) 29 // Should create validator 30 require.Len(t, genesisDoc.Validators, 1) 31 assert.NotZero(t, genesisDoc.Accounts[0].Address) 32 assert.NotZero(t, genesisDoc.Accounts[0].PublicKey) 33 assert.Equal(t, genesisDoc.Accounts[0].Address, genesisDoc.Validators[0].Address) 34 assert.Equal(t, genesisDoc.Accounts[0].PublicKey, genesisDoc.Validators[0].PublicKey) 35 assert.Equal(t, amtBonded, genesisDoc.Validators[0].Amount) 36 assert.NotEmpty(t, genesisDoc.ChainName, "Chain name should not be empty") 37 38 address, err := keyClient.Generate("test-lookup-of-key", crypto.CurveTypeEd25519) 39 require.NoError(t, err) 40 pubKey, err := keyClient.PublicKey(address) 41 require.NoError(t, err) 42 43 // Try a spec with two accounts and no validators 44 amt := uint64(99299299) 45 genesisSpec = GenesisSpec{ 46 Accounts: []TemplateAccount{ 47 { 48 Address: &address, 49 }, 50 { 51 Amounts: balance.New().Native(amt), 52 Permissions: []string{permission.CreateAccountString, permission.CallString}, 53 }}, 54 } 55 56 genesisDoc, err = genesisSpec.GenesisDoc(keyClient, crypto.CurveTypeEd25519) 57 require.NoError(t, err) 58 59 require.Len(t, genesisDoc.Accounts, 2) 60 // Nothing bonded so no validators 61 require.Len(t, genesisDoc.Validators, 0) 62 assert.Equal(t, pubKey, genesisDoc.Accounts[0].PublicKey) 63 assert.Equal(t, amt, genesisDoc.Accounts[1].Amount) 64 permFlag := permission.CreateAccount | permission.Call 65 assert.Equal(t, permFlag, genesisDoc.Accounts[1].Permissions.Base.Perms) 66 assert.Equal(t, permFlag, genesisDoc.Accounts[1].Permissions.Base.SetBit) 67 68 // Try an empty spec 69 genesisSpec = GenesisSpec{} 70 71 genesisDoc, err = genesisSpec.GenesisDoc(keyClient, crypto.CurveTypeEd25519) 72 require.NoError(t, err) 73 74 // Similar assersions to first case - should generate our default single identity chain 75 require.Len(t, genesisDoc.Accounts, 1) 76 // Should create validator 77 require.Len(t, genesisDoc.Validators, 1) 78 assert.NotZero(t, genesisDoc.Accounts[0].Address) 79 assert.NotZero(t, genesisDoc.Accounts[0].PublicKey) 80 assert.Equal(t, genesisDoc.Accounts[0].Address, genesisDoc.Validators[0].Address) 81 assert.Equal(t, genesisDoc.Accounts[0].PublicKey, genesisDoc.Validators[0].PublicKey) 82 } 83 84 func TestTemplateAccount_AccountPermissions(t *testing.T) { 85 }