Skip to content

Commit

Permalink
annotate errors
Browse files Browse the repository at this point in the history
  • Loading branch information
akhilchainani committed Feb 3, 2025
1 parent aa15e57 commit 6236e37
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
4 changes: 2 additions & 2 deletions proposal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ func Test_NewProposal(t *testing.T) {
name: "failure: could not unmarshal JSON",
give: `invalid`,
givePredecessors: []string{},
wantErr: "invalid character 'i' looking for beginning of value",
wantErr: "failed to decode and validate target proposal: invalid character 'i' looking for beginning of value",
},
{
name: "failure: invalid proposal",
Expand All @@ -200,7 +200,7 @@ func Test_NewProposal(t *testing.T) {
"operations": []
}`,
givePredecessors: []string{},
wantErr: "Key: 'Proposal.BaseProposal.ChainMetadata' Error:Field validation for 'ChainMetadata' failed on the 'min' tag\nKey: 'Proposal.Operations' Error:Field validation for 'Operations' failed on the 'min' tag",
wantErr: "failed to decode and validate target proposal: Key: 'Proposal.BaseProposal.ChainMetadata' Error:Field validation for 'ChainMetadata' failed on the 'min' tag\nKey: 'Proposal.Operations' Error:Field validation for 'Operations' failed on the 'min' tag",
},
}

Expand Down
4 changes: 2 additions & 2 deletions timelock_proposal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func Test_NewTimelockProposal(t *testing.T) {
name: "failure: could not unmarshal JSON",
give: `invalid`,
givePredecessors: []string{},
wantErr: "invalid character 'i' looking for beginning of value",
wantErr: "failed to decode and validate target proposal: invalid character 'i' looking for beginning of value",
},
{
name: "failure: invalid proposal",
Expand Down Expand Up @@ -271,7 +271,7 @@ func Test_NewTimelockProposal(t *testing.T) {
]
}`,
givePredecessors: []string{},
wantErr: "Key: 'TimelockProposal.BaseProposal.ChainMetadata' Error:Field validation for 'ChainMetadata' failed on the 'min' tag",
wantErr: "failed to decode and validate target proposal: Key: 'TimelockProposal.BaseProposal.ChainMetadata' Error:Field validation for 'ChainMetadata' failed on the 'min' tag",
},
}

Expand Down
12 changes: 6 additions & 6 deletions utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package mcms

import (
"encoding/json"
"fmt"
"io"

"github.com/ethereum/go-ethereum/common"
Expand Down Expand Up @@ -55,18 +56,17 @@ func decodeAndValidateProposal[T ProposalInterface](reader io.Reader) (T, error)
func newProposal[T ProposalInterface](r io.Reader, predecessors []io.Reader) (T, error) {
p, err := decodeAndValidateProposal[T](r)
if err != nil {
return p, err
return p, fmt.Errorf("failed to decode and validate target proposal: %w", err)
}

predecessorProposals := make([]T, len(predecessors))
for i, pred := range predecessors {
if err := json.NewDecoder(pred).Decode(&predecessorProposals[i]); err != nil {
return p, err
predObj, err := decodeAndValidateProposal[T](pred)
if err != nil {
return p, fmt.Errorf("failed to decode and validate predecessor proposal %d: %w", i, err)
}

if err := predecessorProposals[i].Validate(); err != nil {
return p, err
}
predecessorProposals[i] = predObj
}

startingOpCounts := generateQueuedProposalStartingOpCounts(predecessorProposals)
Expand Down

0 comments on commit 6236e37

Please sign in to comment.