Skip to content

Commit

Permalink
goal: account info with deleted asset suppress error and better output (
Browse files Browse the repository at this point in the history
  • Loading branch information
ahangsu committed Jun 28, 2023
1 parent 74b5f19 commit 22e0e09
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 3 deletions.
15 changes: 12 additions & 3 deletions cmd/goal/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ package main
import (
"bufio"
"encoding/base64"
"errors"
"fmt"
"net/http"
"os"
"path/filepath"
"sort"
Expand All @@ -33,6 +35,7 @@ import (
"github.com/algorand/go-algorand/config"
"github.com/algorand/go-algorand/crypto"
"github.com/algorand/go-algorand/crypto/passphrase"
apiClient "github.com/algorand/go-algorand/daemon/algod/api/client"
"github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/model"
algodAcct "github.com/algorand/go-algorand/data/account"
"github.com/algorand/go-algorand/data/basics"
Expand Down Expand Up @@ -629,9 +632,15 @@ func printAccountInfo(client libgoal.Client, address string, onlyShowAssetIds bo
}
assetParams, err := client.AssetInformation(assetHolding.AssetID)
if err != nil {
hasError = true
fmt.Fprintf(errorReport, "Error: Unable to retrieve asset information for asset %d referred to by account %s: %v\n", assetHolding.AssetID, address, err)
fmt.Fprintf(report, "\tID %d, error\n", assetHolding.AssetID)
var httpError apiClient.HTTPError
if errors.As(err, &httpError) && httpError.StatusCode == http.StatusNotFound {
fmt.Fprintf(report, "\tID %d, <deleted/unknown asset>\n", assetHolding.AssetID)
} else {
fmt.Fprintf(errorReport, "Error: Unable to retrieve asset information for asset %d referred to by account %s: %v\n", assetHolding.AssetID, address, err)
fmt.Fprintf(report, "\tID %d, error\n", assetHolding.AssetID)
hasError = true
}
continue
}

amount := assetDecimalsFmt(assetHolding.Amount, assetParams.Params.Decimals)
Expand Down
56 changes: 56 additions & 0 deletions test/scripts/e2e_subs/goal-account-asset.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/bin/bash

date '+goal-account-asset-test start %Y%m%d_%H%M%S'

set -e
set -x
set -o pipefail
export SHELLOPTS

WALLET=$1

gcmd="goal -w ${WALLET}"

ACCOUNTA=$(${gcmd} account list|awk '{ print $3 }')
ACCOUNTB=$(${gcmd} account new|awk '{ print $6 }')

ASSET_INDEX_PATTERN='Created asset with asset index [[:digit:]]+'

# fund account B a bit
${gcmd} clerk send -a 100000000 -f ${ACCOUNTA} -t ${ACCOUNTB}

# create all assets
RES=$(${gcmd} asset create --name "asset-a" --creator ${ACCOUNTA} --total 100 --no-clawback --no-freezer --manager ${ACCOUNTA} --no-reserve --signer ${ACCOUNTA})
ASSET_A_ID=$(echo ${RES} | grep -Eo "${ASSET_INDEX_PATTERN}" | grep -Eo '[[:digit:]]+')

RES=$(${gcmd} asset create --name "asset-b" --creator ${ACCOUNTA} --total 200 --no-clawback --no-freezer --manager ${ACCOUNTA} --no-reserve --signer ${ACCOUNTA})
ASSET_B_ID=$(echo ${RES} | grep -Eo "${ASSET_INDEX_PATTERN}" | grep -Eo '[[:digit:]]+')

RES=$(${gcmd} asset create --name "asset-c" --creator ${ACCOUNTA} --total 300 --no-clawback --no-freezer --manager ${ACCOUNTA} --no-reserve --signer ${ACCOUNTA})
ASSET_C_ID=$(echo ${RES} | grep -Eo "${ASSET_INDEX_PATTERN}" | grep -Eo '[[:digit:]]+')

RES=$(${gcmd} asset create --name "asset-d" --creator ${ACCOUNTA} --total 400 --no-clawback --no-freezer --manager ${ACCOUNTA} --no-reserve --signer ${ACCOUNTA})
ASSET_D_ID=$(echo ${RES} | grep -Eo "${ASSET_INDEX_PATTERN}" | grep -Eo '[[:digit:]]+')

# opt in all assets
${gcmd} asset optin --account ${ACCOUNTB} --assetid ${ASSET_A_ID} --signer ${ACCOUNTB}
${gcmd} asset optin --account ${ACCOUNTB} --assetid ${ASSET_B_ID} --signer ${ACCOUNTB}
${gcmd} asset optin --account ${ACCOUNTB} --assetid ${ASSET_C_ID} --signer ${ACCOUNTB}
${gcmd} asset optin --account ${ACCOUNTB} --assetid ${ASSET_D_ID} --signer ${ACCOUNTB}

# displays held assets
${gcmd} account info -a ${ACCOUNTB}

# delete one of the asset
${gcmd} asset destroy --assetid ${ASSET_B_ID} --creator ${ACCOUNTA} --signer ${ACCOUNTA}

# check account info display
RES=$(${gcmd} account info -a ${ACCOUNTB})

# check result
EXPECTED="ID ${ASSET_B_ID}, <deleted/unknown asset>"

if [[ ${RES} != *"${EXPECTED}"* ]]; then
date '+goal-account-asset-test should list account info with deleted asset expected line %Y%m%d_%H%M%S'
false
fi

0 comments on commit 22e0e09

Please sign in to comment.