github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/builtin/account/account_test.go (about) 1 package account_test 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/filecoin-project/go-address" 8 "github.com/filecoin-project/go-state-types/exitcode" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 12 "github.com/filecoin-project/specs-actors/v4/actors/builtin" 13 "github.com/filecoin-project/specs-actors/v4/actors/builtin/account" 14 "github.com/filecoin-project/specs-actors/v4/support/mock" 15 tutil "github.com/filecoin-project/specs-actors/v4/support/testing" 16 ) 17 18 type constructorTestCase struct { 19 desc string 20 addr address.Address 21 exitCode exitcode.ExitCode 22 } 23 24 func TestExports(t *testing.T) { 25 mock.CheckActorExports(t, account.Actor{}) 26 } 27 28 func TestAccountactor(t *testing.T) { 29 actor := account.Actor{} 30 31 receiver := tutil.NewIDAddr(t, 100) 32 builder := mock.NewBuilder(receiver).WithCaller(builtin.SystemActorAddr, builtin.SystemActorCodeID) 33 34 testCases := []constructorTestCase{ 35 { 36 desc: "happy path construct SECP256K1 address", 37 addr: tutil.NewSECP256K1Addr(t, "secpaddress"), 38 exitCode: exitcode.Ok, 39 }, 40 { 41 desc: "happy path construct BLS address", 42 addr: tutil.NewBLSAddr(t, 1), 43 exitCode: exitcode.Ok, 44 }, 45 { 46 desc: "fail to construct account actor using ID address", 47 addr: tutil.NewIDAddr(t, 1), 48 exitCode: exitcode.ErrIllegalArgument, 49 }, 50 { 51 desc: "fail to construct account actor using Actor address", 52 addr: tutil.NewActorAddr(t, "actoraddress"), 53 exitCode: exitcode.ErrIllegalArgument, 54 }, 55 } 56 for _, tc := range testCases { 57 t.Run(tc.desc, func(t *testing.T) { 58 rt := builder.Build(t) 59 rt.ExpectValidateCallerAddr(builtin.SystemActorAddr) 60 61 if tc.exitCode.IsSuccess() { 62 rt.Call(actor.Constructor, &tc.addr) 63 64 var st account.State 65 rt.GetState(&st) 66 assert.Equal(t, tc.addr, st.Address) 67 68 rt.ExpectValidateCallerAny() 69 pubkeyAddress := rt.Call(actor.PubkeyAddress, nil).(*address.Address) 70 assert.Equal(t, &tc.addr, pubkeyAddress) 71 72 checkState(t, rt) 73 } else { 74 rt.ExpectAbort(tc.exitCode, func() { 75 rt.Call(actor.Constructor, &tc.addr) 76 }) 77 } 78 rt.Verify() 79 }) 80 } 81 } 82 83 func checkState(t *testing.T, rt *mock.Runtime) { 84 testAddress, err := address.NewIDAddress(1000) 85 require.NoError(t, err) 86 var st account.State 87 rt.GetState(&st) 88 _, msgs := account.CheckStateInvariants(&st, testAddress) 89 assert.True(t, msgs.IsEmpty(), strings.Join(msgs.Messages(), "\n")) 90 }