Skip to content

Commit

Permalink
make the tests compile, and not segfault so much, but not pass
Browse files Browse the repository at this point in the history
  • Loading branch information
cce committed Jan 13, 2022
1 parent b85b1ef commit ac527ea
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 82 deletions.
62 changes: 22 additions & 40 deletions ledger/acctupdates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -362,37 +362,21 @@ func checkAcctUpdatesConsistency(t *testing.T, au *accountUpdates, rnd basics.Ro
accounts[addr] = macct
}

for _, rec := range rdelta.GetAllAppLocalStates() {
for _, rec := range rdelta.GetAllAppResources() {
key := accountCreatable{rec.Addr, basics.CreatableIndex(rec.Aidx)}
entry, _ := resources.get(key)
entry.resource.AppLocalState = rec.State
entry.resource.AppLocalState = rec.State.State
entry.resource.AppParams = rec.Params.Params
entry.resource.CreatableIndex = basics.CreatableIndex(rec.Aidx)
entry.resource.CreatableType = basics.AppCreatable
entry.ndeltas++
resources[key] = entry
}
for _, rec := range rdelta.GetAllAppParams() {
for _, rec := range rdelta.GetAllAssetResources() {
key := accountCreatable{rec.Addr, basics.CreatableIndex(rec.Aidx)}
entry, _ := resources.get(key)
entry.resource.AppParams = rec.Params
entry.resource.CreatableIndex = basics.CreatableIndex(rec.Aidx)
entry.resource.CreatableType = basics.AppCreatable
entry.ndeltas++
resources[key] = entry
}
for _, rec := range rdelta.GetAllAssetsHoldings() {
key := accountCreatable{rec.Addr, basics.CreatableIndex(rec.Aidx)}
entry, _ := resources.get(key)
entry.resource.AssetHolding = rec.Holding
entry.resource.CreatableIndex = basics.CreatableIndex(rec.Aidx)
entry.resource.CreatableType = basics.AssetCreatable
entry.ndeltas++
resources[key] = entry
}
for _, rec := range rdelta.GetAllAssetParams() {
key := accountCreatable{rec.Addr, basics.CreatableIndex(rec.Aidx)}
entry, _ := resources.get(key)
entry.resource.AssetParams = rec.Params
entry.resource.AssetHolding = rec.Holding.Holding
entry.resource.AssetParams = rec.Params.Params
entry.resource.CreatableIndex = basics.CreatableIndex(rec.Aidx)
entry.resource.CreatableType = basics.AssetCreatable
entry.ndeltas++
Expand Down Expand Up @@ -1453,10 +1437,10 @@ func TestCompactDeltasResources(t *testing.T) {

// check empty deltas do no produce empty resourcesData records
accountDeltas := make([]ledgercore.NewAccountDeltas, 1)
accountDeltas[0].UpsertAppParams(addrs[0], 100, nil)
accountDeltas[0].UpsertAppLocalState(addrs[1], 101, nil)
accountDeltas[0].UpsertAssetParams(addrs[2], 102, nil)
accountDeltas[0].UpsertAssetHolding(addrs[3], 103, nil)
accountDeltas[0].UpsertAppResource(addrs[0], 100, ledgercore.AppParamsDelta{Deleted: true}, ledgercore.AppLocalStateDelta{})
accountDeltas[0].UpsertAppResource(addrs[1], 101, ledgercore.AppParamsDelta{}, ledgercore.AppLocalStateDelta{Deleted: true})
accountDeltas[0].UpsertAssetResource(addrs[2], 102, ledgercore.AssetParamsDelta{Deleted: true}, ledgercore.AssetHoldingDelta{})
accountDeltas[0].UpsertAssetResource(addrs[3], 103, ledgercore.AssetParamsDelta{}, ledgercore.AssetHoldingDelta{Deleted: true})

outResourcesDeltas := makeCompactResourceDeltas(accountDeltas, basics.Round(1), true, baseAccounts, baseResources)
delta, _ := outResourcesDeltas.get(addrs[0], 100)
Expand Down Expand Up @@ -1484,26 +1468,24 @@ func TestCompactDeltasResources(t *testing.T) {
// addr 0 has app params and a local state for another app
appParams100 := basics.AppParams{ApprovalProgram: []byte{100}}
appLocalState200 := basics.AppLocalState{KeyValue: basics.TealKeyValue{"200": basics.TealValue{Type: basics.TealBytesType, Bytes: "200"}}}
accountDeltas[0].UpsertAppParams(addrs[0], 100, &appParams100)
accountDeltas[0].UpsertAppLocalState(addrs[0], 200, &appLocalState200)
accountDeltas[0].UpsertAppResource(addrs[0], 100, ledgercore.AppParamsDelta{Params: &appParams100}, ledgercore.AppLocalStateDelta{})
accountDeltas[0].UpsertAppResource(addrs[0], 200, ledgercore.AppParamsDelta{}, ledgercore.AppLocalStateDelta{State: &appLocalState200})

// addr 1 has app params and a local state for the same app
appParams101 := basics.AppParams{ApprovalProgram: []byte{101}}
appLocalState101 := basics.AppLocalState{KeyValue: basics.TealKeyValue{"101": basics.TealValue{Type: basics.TealBytesType, Bytes: "101"}}}
accountDeltas[0].UpsertAppParams(addrs[1], 101, &appParams101)
accountDeltas[0].UpsertAppLocalState(addrs[1], 101, &appLocalState101)
accountDeltas[0].UpsertAppResource(addrs[1], 101, ledgercore.AppParamsDelta{Params: &appParams101}, ledgercore.AppLocalStateDelta{State: &appLocalState101})

// addr 2 has asset params and a holding for another asset
assetParams102 := basics.AssetParams{Total: 102}
assetHolding202 := basics.AssetHolding{Amount: 202}
accountDeltas[0].UpsertAssetParams(addrs[2], 102, &assetParams102)
accountDeltas[0].UpsertAssetHolding(addrs[2], 202, &assetHolding202)
accountDeltas[0].UpsertAssetResource(addrs[2], 102, ledgercore.AssetParamsDelta{Params: &assetParams102}, ledgercore.AssetHoldingDelta{})
accountDeltas[0].UpsertAssetResource(addrs[2], 202, ledgercore.AssetParamsDelta{}, ledgercore.AssetHoldingDelta{Holding: &assetHolding202})

// addr 3 has asset params and a holding for the same asset
assetParams103 := basics.AssetParams{Total: 103}
assetHolding103 := basics.AssetHolding{Amount: 103}
accountDeltas[0].UpsertAssetParams(addrs[3], 103, &assetParams103)
accountDeltas[0].UpsertAssetHolding(addrs[3], 103, &assetHolding103)
accountDeltas[0].UpsertAssetResource(addrs[3], 103, ledgercore.AssetParamsDelta{Params: &assetParams103}, ledgercore.AssetHoldingDelta{Holding: &assetHolding103})

baseResources.init(nil, 100, 80)

Expand Down Expand Up @@ -1588,12 +1570,12 @@ func TestCompactDeltasResources(t *testing.T) {
accountDeltas[1].Upsert(addrs[3], ledgercore.AccountData{AccountBaseData: ledgercore.AccountBaseData{MicroAlgos: basics.MicroAlgos{Raw: 8}}})

appLocalState100 := basics.AppLocalState{KeyValue: basics.TealKeyValue{"100": basics.TealValue{Type: basics.TealBytesType, Bytes: "100"}}}
accountDeltas[1].UpsertAppLocalState(addrs[0], 100, &appLocalState100)
accountDeltas[1].UpsertAppResource(addrs[0], 100, ledgercore.AppParamsDelta{}, ledgercore.AppLocalStateDelta{State: &appLocalState100})

appParams104 := basics.AppParams{ApprovalProgram: []byte{104}}
appLocalState204 := basics.AppLocalState{KeyValue: basics.TealKeyValue{"204": basics.TealValue{Type: basics.TealBytesType, Bytes: "204"}}}
accountDeltas[1].UpsertAppParams(addrs[4], 104, &appParams104)
accountDeltas[1].UpsertAppLocalState(addrs[4], 104, &appLocalState204)
accountDeltas[1].UpsertAppResource(addrs[4], 104, ledgercore.AppParamsDelta{Params: &appParams104}, ledgercore.AppLocalStateDelta{})
accountDeltas[1].UpsertAppResource(addrs[4], 104, ledgercore.AppParamsDelta{}, ledgercore.AppLocalStateDelta{State: &appLocalState204})

baseResources.write(persistedResourcesData{addrid: 5 /* 4+1 */, aidx: basics.CreatableIndex(104)}, addrs[4])
outResourcesDeltas = makeCompactResourceDeltas(accountDeltas, basics.Round(1), true, baseAccounts, baseResources)
Expand Down Expand Up @@ -2031,13 +2013,13 @@ func TestAcctUpdatesResources(t *testing.T) {

// modify state as needed for the tests: create, delete, create
if i == 1 {
updates.UpsertAssetHolding(addr, aidx, &basics.AssetHolding{Amount: 100})
updates.UpsertAssetResource(addr, aidx, ledgercore.AssetParamsDelta{}, ledgercore.AssetHoldingDelta{Holding: &basics.AssetHolding{Amount: 100}})
}
if i == 2 {
updates.UpsertAssetHolding(addr, aidx, nil)
updates.UpsertAssetResource(addr, aidx, ledgercore.AssetParamsDelta{}, ledgercore.AssetHoldingDelta{Deleted: true})
}
if i == 3 {
updates.UpsertAssetHolding(addr, aidx, &basics.AssetHolding{Amount: 200})
updates.UpsertAssetResource(addr, aidx, ledgercore.AssetParamsDelta{}, ledgercore.AssetHoldingDelta{Holding: &basics.AssetHolding{Amount: 200}})
}
prevTotals, err := au.Totals(basics.Round(i - 1))
require.NoError(t, err)
Expand Down
37 changes: 20 additions & 17 deletions ledger/internal/appcow_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,20 +47,20 @@ func (ml *emptyLedger) lookup(addr basics.Address) (ledgercore.AccountData, erro
return ledgercore.AccountData{}, nil
}

func (ml *emptyLedger) lookupAppParams(addr basics.Address, aidx basics.AppIndex) (basics.AppParams, bool, error) {
return basics.AppParams{}, true, nil
func (ml *emptyLedger) lookupAppParams(addr basics.Address, aidx basics.AppIndex, fromCache bool) (ledgercore.AppParamsDelta, bool, error) {
return ledgercore.AppParamsDelta{}, true, nil
}

func (ml *emptyLedger) lookupAssetParams(addr basics.Address, aidx basics.AssetIndex) (basics.AssetParams, bool, error) {
return basics.AssetParams{}, true, nil
func (ml *emptyLedger) lookupAssetParams(addr basics.Address, aidx basics.AssetIndex, fromCache bool) (ledgercore.AssetParamsDelta, bool, error) {
return ledgercore.AssetParamsDelta{}, true, nil
}

func (ml *emptyLedger) lookupAppLocalState(addr basics.Address, aidx basics.AppIndex) (basics.AppLocalState, bool, error) {
return basics.AppLocalState{}, true, nil
func (ml *emptyLedger) lookupAppLocalState(addr basics.Address, aidx basics.AppIndex, fromCache bool) (ledgercore.AppLocalStateDelta, bool, error) {
return ledgercore.AppLocalStateDelta{}, true, nil
}

func (ml *emptyLedger) lookupAssetHolding(addr basics.Address, aidx basics.AssetIndex) (basics.AssetHolding, bool, error) {
return basics.AssetHolding{}, true, nil
func (ml *emptyLedger) lookupAssetHolding(addr basics.Address, aidx basics.AssetIndex, fromCache bool) (ledgercore.AssetHoldingDelta, bool, error) {
return ledgercore.AssetHoldingDelta{}, true, nil
}

func (ml *emptyLedger) checkDup(firstValid, lastValid basics.Round, txn transactions.Txid, txl ledgercore.Txlease) error {
Expand Down Expand Up @@ -847,14 +847,13 @@ func TestApplyStorageDelta(t *testing.T) {
)

params1 := basics.AppParams{GlobalState: make(basics.TealKeyValue)}
cow.mods.NewAccts.UpsertAppParams(addr, 1, &params1)
params2 := basics.AppParams{GlobalState: kv}
cow.mods.NewAccts.UpsertAppParams(addr, 2, &params2)

state1 := basics.AppLocalState{KeyValue: make(basics.TealKeyValue)}
cow.mods.NewAccts.UpsertAppLocalState(addr, 1, &state1)
state2 := basics.AppLocalState{KeyValue: kv}
cow.mods.NewAccts.UpsertAppLocalState(addr, 2, &state2)

cow.mods.NewAccts.UpsertAppResource(addr, 1, ledgercore.AppParamsDelta{Params: &params1}, ledgercore.AppLocalStateDelta{State: &state1})
cow.mods.NewAccts.UpsertAppResource(addr, 2, ledgercore.AppParamsDelta{Params: &params2}, ledgercore.AppLocalStateDelta{State: &state2})

return cow
}
Expand All @@ -881,7 +880,7 @@ func TestApplyStorageDelta(t *testing.T) {
a.True(ok)
state2, ok := cow.mods.NewAccts.GetAppLocalState(addr, 2)
a.True(ok)
return params1, params2, state1, state2
return params1.Params, params2.Params, state1.State, state2.State
}

kv := basics.TealKeyValue{
Expand Down Expand Up @@ -974,18 +973,22 @@ func TestApplyStorageDelta(t *testing.T) {

err := applyStorageDelta(cow, addr, storagePtr{1, true}, &sd)
a.NoError(err)
params1, ok := cow.mods.NewAccts.GetAppParams(addr, 1)
params1d, ok := cow.mods.NewAccts.GetAppParams(addr, 1)
params1 = params1d.Params
a.True(ok)
state1, ok = cow.mods.NewAccts.GetAppLocalState(addr, 1)
state1d, ok := cow.mods.NewAccts.GetAppLocalState(addr, 1)
state1 = state1d.State
a.False(ok)
a.Nil(params1)
a.Nil(state1)

err = applyStorageDelta(cow, addr, storagePtr{1, false}, &sd)
a.NoError(err)
params1, ok = cow.mods.NewAccts.GetAppParams(addr, 1)
params1d, ok = cow.mods.NewAccts.GetAppParams(addr, 1)
params1 = params1d.Params
a.True(ok)
state1, ok = cow.mods.NewAccts.GetAppLocalState(addr, 1)
state1d, ok = cow.mods.NewAccts.GetAppLocalState(addr, 1)
state1 = state1d.State
a.True(ok)
a.Nil(params1)
a.Nil(state1)
Expand Down
16 changes: 8 additions & 8 deletions ledger/internal/cow_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,24 +41,24 @@ func (ml *mockLedger) lookup(addr basics.Address) (ledgercore.AccountData, error
return ledgercore.ToAccountData(ml.balanceMap[addr]), nil
}

func (ml *mockLedger) lookupAppParams(addr basics.Address, aidx basics.AppIndex) (basics.AppParams, bool, error) {
func (ml *mockLedger) lookupAppParams(addr basics.Address, aidx basics.AppIndex, fromCache bool) (ledgercore.AppParamsDelta, bool, error) {
params, ok := ml.balanceMap[addr].AppParams[aidx]
return params, ok, nil
return ledgercore.AppParamsDelta{Params: &params}, ok, nil // XXX make a copy?
}

func (ml *mockLedger) lookupAssetParams(addr basics.Address, aidx basics.AssetIndex) (basics.AssetParams, bool, error) {
func (ml *mockLedger) lookupAssetParams(addr basics.Address, aidx basics.AssetIndex, fromCache bool) (ledgercore.AssetParamsDelta, bool, error) {
params, ok := ml.balanceMap[addr].AssetParams[aidx]
return params, ok, nil
return ledgercore.AssetParamsDelta{Params: &params}, ok, nil
}

func (ml *mockLedger) lookupAppLocalState(addr basics.Address, aidx basics.AppIndex) (basics.AppLocalState, bool, error) {
func (ml *mockLedger) lookupAppLocalState(addr basics.Address, aidx basics.AppIndex, fromCache bool) (ledgercore.AppLocalStateDelta, bool, error) {
params, ok := ml.balanceMap[addr].AppLocalStates[aidx]
return params, ok, nil
return ledgercore.AppLocalStateDelta{State: &params}, ok, nil
}

func (ml *mockLedger) lookupAssetHolding(addr basics.Address, aidx basics.AssetIndex) (basics.AssetHolding, bool, error) {
func (ml *mockLedger) lookupAssetHolding(addr basics.Address, aidx basics.AssetIndex, fromCache bool) (ledgercore.AssetHoldingDelta, bool, error) {
params, ok := ml.balanceMap[addr].Assets[aidx]
return params, ok, nil
return ledgercore.AssetHoldingDelta{Holding: &params}, ok, nil
}

func (ml *mockLedger) checkDup(firstValid, lastValid basics.Round, txn transactions.Txid, txl ledgercore.Txlease) error {
Expand Down
2 changes: 1 addition & 1 deletion ledger/internal/eval_blackbox_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ func TestEvalAppAllocStateWithTxnGroup(t *testing.T) {
deltas := vb.Delta()

params, _ := deltas.NewAccts.GetAppParams(addr, 1)
state := params.GlobalState
state := params.Params.GlobalState
require.Equal(t, basics.TealValue{Type: basics.TealBytesType, Bytes: string(addr[:])}, state["caller"])
require.Equal(t, basics.TealValue{Type: basics.TealBytesType, Bytes: string(addr[:])}, state["creator"])
}
Expand Down
32 changes: 16 additions & 16 deletions ledger/ledgercore/statedelta.go
Original file line number Diff line number Diff line change
Expand Up @@ -453,10 +453,10 @@ func (ad NewAccountDeltas) GetBasicsAccountData(addr basics.Address) (basics.Acc
for aapp, idx := range ad.appResourcesCache {
rec := ad.appResources[idx]
if aapp.Address == addr {
if !rec.Params.Deleted {
if !rec.Params.Deleted && rec.Params.Params != nil {
result.AppParams[aapp.App] = *rec.Params.Params
}
if !rec.State.Deleted {
if !rec.State.Deleted && rec.State.State != nil {
result.AppLocalStates[aapp.App] = *rec.State.State
}
}
Expand All @@ -475,10 +475,10 @@ func (ad NewAccountDeltas) GetBasicsAccountData(addr basics.Address) (basics.Acc
for aapp, idx := range ad.assetResourcesCache {
rec := ad.assetResources[idx]
if aapp.Address == addr {
if !rec.Params.Deleted {
if !rec.Params.Deleted && rec.Params.Params != nil {
result.AssetParams[aapp.Asset] = *rec.Params.Params
}
if !rec.Holding.Deleted {
if !rec.Holding.Deleted && rec.Holding.Holding != nil {
result.Assets[aapp.Asset] = *rec.Holding.Holding
}
}
Expand Down Expand Up @@ -560,12 +560,12 @@ func AccumulateDeltas(base map[basics.Address]basics.AccountData, deltas NewAcco
rec := deltas.appResources[idx]
if rec.Params.Deleted {
delete(ad.AppParams, aapp.App)
} else {
} else if rec.Params.Params != nil {
ad.AppParams[aapp.App] = *rec.Params.Params
}
if rec.State.Deleted {
delete(ad.AppLocalStates, aapp.App)
} else {
} else if rec.State.State != nil {
ad.AppLocalStates[aapp.App] = *rec.State.State
}
base[aapp.Address] = ad
Expand All @@ -586,12 +586,12 @@ func AccumulateDeltas(base map[basics.Address]basics.AccountData, deltas NewAcco
rec := deltas.assetResources[idx]
if rec.Params.Deleted {
delete(ad.AssetParams, aapp.Asset)
} else {
} else if rec.Params.Params != nil {
ad.AssetParams[aapp.Asset] = *rec.Params.Params
}
if rec.Holding.Deleted {
delete(ad.Assets, aapp.Asset)
} else {
} else if rec.Holding.Holding != nil {
ad.Assets[aapp.Asset] = *rec.Holding.Holding
}
base[aapp.Address] = ad
Expand Down Expand Up @@ -641,7 +641,7 @@ func (ad NewAccountDeltas) ApplyToBasicsAccountData(addr basics.Address, prev ba
rec := ad.appResources[idx]
if rec.Params.Deleted {
delete(result.AppParams, aapp.App)
} else {
} else if rec.Params.Params != nil {
result.AppParams[aapp.App] = *rec.Params.Params
}
}
Expand All @@ -665,7 +665,7 @@ func (ad NewAccountDeltas) ApplyToBasicsAccountData(addr basics.Address, prev ba
rec := ad.appResources[idx]
if rec.State.Deleted {
delete(result.AppLocalStates, aapp.App)
} else {
} else if rec.State.State != nil {
result.AppLocalStates[aapp.App] = *rec.State.State
}
}
Expand All @@ -688,7 +688,7 @@ func (ad NewAccountDeltas) ApplyToBasicsAccountData(addr basics.Address, prev ba
rec := ad.assetResources[idx]
if rec.Params.Deleted {
delete(result.AssetParams, aapp.Asset)
} else {
} else if rec.Params.Params != nil {
result.AssetParams[aapp.Asset] = *rec.Params.Params
}
}
Expand All @@ -712,7 +712,7 @@ func (ad NewAccountDeltas) ApplyToBasicsAccountData(addr basics.Address, prev ba
rec := ad.assetResources[idx]
if rec.Holding.Deleted {
delete(result.Assets, aapp.Asset)
} else {
} else if rec.Holding.Holding != nil {
result.Assets[aapp.Asset] = *rec.Holding.Holding
}
}
Expand Down Expand Up @@ -752,13 +752,13 @@ func (ad *NewAccountDeltas) mergeInOther(addr basics.Address, other NewAccountDe
if rec.Addr == addr {
var newParams AppParamsDelta
newParams.Deleted = rec.Params.Deleted
if !rec.Params.Deleted {
if !rec.Params.Deleted && rec.Params.Params != nil {
cp := *rec.Params.Params
newParams.Params = &cp
}
var newState AppLocalStateDelta
newState.Deleted = rec.State.Deleted
if !rec.State.Deleted {
if !rec.State.Deleted && rec.State.State != nil {
cp := *rec.State.State
newState.State = &cp
}
Expand All @@ -773,13 +773,13 @@ func (ad *NewAccountDeltas) mergeInOther(addr basics.Address, other NewAccountDe
if rec.Addr == addr {
var newParams AssetParamsDelta
newParams.Deleted = rec.Params.Deleted
if !rec.Params.Deleted {
if !rec.Params.Deleted && rec.Params.Params != nil {
cp := *rec.Params.Params
newParams.Params = &cp
}
var newHolding AssetHoldingDelta
newHolding.Deleted = rec.Holding.Deleted
if !rec.Holding.Deleted {
if !rec.Holding.Deleted && rec.Holding.Holding != nil {
cp := *rec.Holding.Holding
newHolding.Holding = &cp
}
Expand Down

0 comments on commit ac527ea

Please sign in to comment.