@@ -2,6 +2,22 @@ package lien
22
33import (
44 "testing"
5+
6+ "github.com/Agoric/agoric-sdk/golang/cosmos/x/lien/types"
7+
8+ "github.com/cosmos/cosmos-sdk/testutil/testdata"
9+ sdk "github.com/cosmos/cosmos-sdk/types"
10+ )
11+
12+ func mkcoin (denom string ) func (int64 ) sdk.Coin {
13+ return func (amt int64 ) sdk.Coin { return sdk .NewInt64Coin (denom , amt ) }
14+ }
15+
16+ var (
17+ ubld = mkcoin ("ubld" )
18+ urun = mkcoin ("urun" )
19+ inval = func (amt int64 ) sdk.Coin { return sdk.Coin {Denom : "x" , Amount : sdk .NewInt (amt )} }
20+ coins = sdk .NewCoins
521)
622
723func TestDefaultGenesis (t * testing.T ) {
@@ -10,3 +26,76 @@ func TestDefaultGenesis(t *testing.T) {
1026 t .Errorf ("DefaultGenesisState did not validate %v: %e" , defaultGenesisState , err )
1127 }
1228}
29+
30+ func TestValidateGenesis (t * testing.T ) {
31+ _ , _ , addr1 := testdata .KeyTestPubAddr ()
32+ _ , _ , addr2 := testdata .KeyTestPubAddr ()
33+ for _ , tt := range []struct {
34+ name string
35+ state types.GenesisState
36+ fail bool
37+ }{
38+ {
39+ name : "empty" ,
40+ state : types.GenesisState {},
41+ },
42+ {
43+ name : "typical" ,
44+ state : types.GenesisState {
45+ Liens : []types.AccountLien {
46+ {Address : addr1 .String (), Lien : & types.Lien {
47+ Coins : coins (ubld (123 )),
48+ Delegated : coins (ubld (456 )),
49+ }},
50+ {Address : addr2 .String (), Lien : & types.Lien {
51+ Coins : coins (ubld (246 ), urun (135 )),
52+ Delegated : coins (),
53+ }},
54+ },
55+ },
56+ },
57+ {
58+ name : "bad addr" ,
59+ state : types.GenesisState {
60+ Liens : []types.AccountLien {
61+ {Address : "x" , Lien : & types.Lien {}},
62+ },
63+ },
64+ fail : true ,
65+ },
66+ {
67+ name : "bad coins" ,
68+ state : types.GenesisState {
69+ Liens : []types.AccountLien {
70+ {
71+ Address : addr1 .String (),
72+ Lien : & types.Lien {Coins : []sdk.Coin {inval (6 )}},
73+ },
74+ },
75+ },
76+ fail : true ,
77+ },
78+ {
79+ name : "bad delegated" ,
80+ state : types.GenesisState {
81+ Liens : []types.AccountLien {
82+ {
83+ Address : addr2 .String (),
84+ Lien : & types.Lien {Delegated : []sdk.Coin {inval (6 )}},
85+ },
86+ },
87+ },
88+ fail : true ,
89+ },
90+ } {
91+ t .Run (tt .name , func (t * testing.T ) {
92+ err := ValidateGenesis (tt .state )
93+ switch {
94+ case err != nil && ! tt .fail :
95+ t .Errorf ("invalid genesis state %v: %v" , tt .state , err )
96+ case err == nil && tt .fail :
97+ t .Errorf ("expected invalid genesis %v" , tt .state )
98+ }
99+ })
100+ }
101+ }
0 commit comments