github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/genesis/spec/presets_test.go (about)

     1  package spec
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hyperledger/burrow/acm/balance"
     7  	crypto "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 TestMergeGenesisSpecAccounts(t *testing.T) {
    16  	keyClient := keys.NewLocalKeyClient(keys.NewMemoryKeyStore(), logging.NewNoopLogger())
    17  	gs := MergeGenesisSpecs(FullAccount("0"), ParticipantAccount("1"), ParticipantAccount("2"))
    18  	gd, err := gs.GenesisDoc(keyClient, crypto.CurveTypeEd25519)
    19  	require.NoError(t, err)
    20  	assert.Len(t, gd.Validators, 1)
    21  	assert.Len(t, gd.Accounts, 3)
    22  }
    23  
    24  func TestMergeGenesisSpecGlobalPermissions(t *testing.T) {
    25  	gs1 := GenesisSpec{
    26  		GlobalPermissions: []string{permission.CreateAccountString, permission.CreateAccountString},
    27  	}
    28  	gs2 := GenesisSpec{
    29  		GlobalPermissions: []string{permission.SendString, permission.CreateAccountString, permission.HasRoleString},
    30  	}
    31  
    32  	gsMerged := MergeGenesisSpecs(gs1, gs2)
    33  	assert.Equal(t, []string{permission.CreateAccountString, permission.HasRoleString, permission.SendString},
    34  		gsMerged.GlobalPermissions)
    35  }
    36  
    37  func TestMergeGenesisSpecsRepeatedAccounts(t *testing.T) {
    38  	name1 := "Party!"
    39  	name3 := "Counter!"
    40  
    41  	amt1 := uint64(5)
    42  	amt2 := uint64(2)
    43  	amt3 := uint64(9)
    44  
    45  	gs1 := GenesisSpec{
    46  		Accounts: []TemplateAccount{
    47  			{
    48  				Name:        name1,
    49  				Amounts:     balance.New().Native(amt1),
    50  				Permissions: []string{permission.SendString, permission.CreateAccountString, permission.HasRoleString},
    51  				Roles:       []string{"fooer"},
    52  			},
    53  		},
    54  	}
    55  	gs2 := GenesisSpec{
    56  		Accounts: []TemplateAccount{
    57  			{
    58  				Name:        name1,
    59  				Amounts:     balance.New().Native(amt2),
    60  				Permissions: []string{permission.SendString, permission.CreateAccountString},
    61  				Roles:       []string{"barer"},
    62  			},
    63  		},
    64  	}
    65  	gs3 := GenesisSpec{
    66  		Accounts: []TemplateAccount{
    67  			{
    68  				Name:    name3,
    69  				Amounts: balance.New().Native(amt3),
    70  			},
    71  		},
    72  	}
    73  
    74  	gsMerged := MergeGenesisSpecs(gs1, gs2, gs3)
    75  	bsMerged, err := gsMerged.JSONBytes()
    76  	require.NoError(t, err)
    77  
    78  	amtExpected := amt1 + amt2
    79  	gsExpected := GenesisSpec{
    80  		Accounts: []TemplateAccount{
    81  			{
    82  				Name:        name1,
    83  				Amounts:     balance.New().Native(amtExpected),
    84  				Permissions: []string{permission.CreateAccountString, permission.HasRoleString, permission.SendString},
    85  				Roles:       []string{"barer", "fooer"},
    86  			},
    87  			gs3.Accounts[0],
    88  		},
    89  	}
    90  	bsExpected, err := gsExpected.JSONBytes()
    91  	require.NoError(t, err)
    92  	if !assert.Equal(t, string(bsExpected), string(bsMerged)) {
    93  		t.Logf("Expected:\n%s\n\nActual:\n%s", string(bsExpected), string(bsMerged))
    94  	}
    95  }