Skip to content

Commit

Permalink
stellar#5221: use empty string for result_meta_xdr and omitempty on j…
Browse files Browse the repository at this point in the history
…son mapping, so field is absent from json
  • Loading branch information
sreuland committed Mar 6, 2024
1 parent 0e767ad commit 325d0ba
Show file tree
Hide file tree
Showing 11 changed files with 63 additions and 28 deletions.
32 changes: 29 additions & 3 deletions clients/horizonclient/main_test.go
Expand Up @@ -3,6 +3,7 @@ package horizonclient
import (
"fmt"
"net/http"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -852,7 +853,7 @@ func TestSubmitTransactionXDRRequest(t *testing.T) {
assert.Equal(t, resp.Ledger, int32(354811))
assert.Equal(t, resp.EnvelopeXdr, txXdr)
assert.Equal(t, resp.ResultXdr, "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA=")
assert.Equal(t, *resp.ResultMetaXdr, `AAAAAQAAAAIAAAADAAVp+wAAAAAAAAAAEH3Rayw4M0iCLoEe96rPFNGYim8AVHJU0z4ebYZW4JwACBP/TuycHAAABD0AAuV+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAVp+wAAAAAAAAAAEH3Rayw4M0iCLoEe96rPFNGYim8AVHJU0z4ebYZW4JwACBP/TuycHAAABD0AAuV/AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMABWn7AAAAAAAAAAAQfdFrLDgzSIIugR73qs8U0ZiKbwBUclTTPh5thlbgnAAIE/9O7JwcAAAEPQAC5X8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABWn7AAAAAAAAAAAQfdFrLDgzSIIugR73qs8U0ZiKbwBUclTTPh5thlbgnAAIE+gGdbQcAAAEPQAC5X8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABWn7AAAAAAAAAADJMEbE6B9ICmmmxOdv9hGvqA5HxZPQtk2uEuHjLcUKCgAAABdIdugAAAVp+wAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==`)
assert.Equal(t, resp.ResultMetaXdr, `AAAAAQAAAAIAAAADAAVp+wAAAAAAAAAAEH3Rayw4M0iCLoEe96rPFNGYim8AVHJU0z4ebYZW4JwACBP/TuycHAAABD0AAuV+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAVp+wAAAAAAAAAAEH3Rayw4M0iCLoEe96rPFNGYim8AVHJU0z4ebYZW4JwACBP/TuycHAAABD0AAuV/AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAMABWn7AAAAAAAAAAAQfdFrLDgzSIIugR73qs8U0ZiKbwBUclTTPh5thlbgnAAIE/9O7JwcAAAEPQAC5X8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABWn7AAAAAAAAAAAQfdFrLDgzSIIugR73qs8U0ZiKbwBUclTTPh5thlbgnAAIE+gGdbQcAAAEPQAC5X8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABWn7AAAAAAAAAADJMEbE6B9ICmmmxOdv9hGvqA5HxZPQtk2uEuHjLcUKCgAAABdIdugAAAVp+wAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==`)
}
}

Expand Down Expand Up @@ -905,6 +906,20 @@ func TestSubmitTransactionRequest(t *testing.T) {
_, err = client.SubmitTransaction(tx)
assert.NoError(t, err)

// verify submit parses correctly when result_meta_xdr absent when skip_meta=true
hmock.On(
"POST",
"https://localhost/transactions",
).Return(func(request *http.Request) (*http.Response, error) {
val := request.FormValue("tx")
assert.Equal(t, val, txXdr)
return httpmock.NewStringResponse(http.StatusOK, strings.Replace(txDetailResponse, "<result_meta_xdr>", "", 1)), nil
})

theTx, err := client.SubmitTransaction(tx)
assert.NoError(t, err)
assert.Empty(t, theTx.ResultMetaXdr)

// memo required - does not submit transaction
hmock.On(
"GET",
Expand Down Expand Up @@ -1388,7 +1403,7 @@ func TestTransactionsRequest(t *testing.T) {
hmock.On(
"GET",
"https://localhost/transactions/5131aed266a639a6eb4802a92fba310454e711ded830ed899745b9e777d7110c",
).ReturnString(200, txDetailResponse)
).ReturnString(200, strings.Replace(txDetailResponse, "<result_meta_xdr>", "result_meta_xdr: AAAAAQAAAAIAAAADAAavdgAAAAAAAAAAtoYrQZHbnPLAFsF4YB88J5VSg0/piQNHm0SL9l0HW1EAAAAXSHbnnAAGr3UAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAavdgAAAAAAAAAAtoYrQZHbnPLAFsF4YB88J5VSg0/piQNHm0SL9l0HW1EAAAAXSHbnnAAGr3UAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMABq9zAAAAAAAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAUQ/z+cAABeBgAASuQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAcXjracAABeBgAASuQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIduecAAavdQAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABVB53CcAAavdQAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", 1))

record, err := client.TransactionDetail(txHash)
if assert.NoError(t, err) {
Expand All @@ -1397,6 +1412,17 @@ func TestTransactionsRequest(t *testing.T) {
assert.Equal(t, record.Hash, "5131aed266a639a6eb4802a92fba310454e711ded830ed899745b9e777d7110c")
assert.Equal(t, record.Memo, "2A1V6J5703G47XHY")
}

// transaction detail when skip meta enabled and result_meta_xdr is absent
hmock.On(
"GET",
"https://localhost/transactions/5131aed266a639a6eb4802a92fba310454e711ded830ed899745b9e777d7110c",
).ReturnString(200, strings.Replace(txDetailResponse, "<result_meta_xdr>", "", 1))

record, err = client.TransactionDetail(txHash)
if assert.NoError(t, err) {
assert.Empty(t, record.ResultMetaXdr)
}
}

func TestOrderBookRequest(t *testing.T) {
Expand Down Expand Up @@ -2492,7 +2518,7 @@ var txDetailResponse = `{
"operation_count": 1,
"envelope_xdr": "AAAAALaGK0GR25zywBbBeGAfPCeVUoNP6YkDR5tEi/ZdB1tRAAAAZAAGr3UAAAABAAAAAAAAAAEAAAAQMkExVjZKNTcwM0c0N1hIWQAAAAEAAAABAAAAALaGK0GR25zywBbBeGAfPCeVUoNP6YkDR5tEi/ZdB1tRAAAAAQAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAAAAAACBo93AAAAAAAAAAABXQdbUQAAAECQ5m6ZHsv8/Gd/aRJ2EMLurJMxFynT7KbD51T7gD91Gqp/fzsRHilSGoVSw5ztmtJb2LP7o3bQbiZynQiJPl8C",
"result_xdr": "AAAAAAAAAGQAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAA=",
"result_meta_xdr": "AAAAAQAAAAIAAAADAAavdgAAAAAAAAAAtoYrQZHbnPLAFsF4YB88J5VSg0/piQNHm0SL9l0HW1EAAAAXSHbnnAAGr3UAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAavdgAAAAAAAAAAtoYrQZHbnPLAFsF4YB88J5VSg0/piQNHm0SL9l0HW1EAAAAXSHbnnAAGr3UAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMABq9zAAAAAAAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAUQ/z+cAABeBgAASuQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAcXjracAABeBgAASuQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIduecAAavdQAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABVB53CcAAavdQAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==",
"result_meta_xdr": "<result_meta_xdr>",
"fee_meta_xdr": "AAAAAgAAAAMABq91AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIdugAAAavdQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIduecAAavdQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==",
"memo_type": "text",
"signatures": [
Expand Down
2 changes: 1 addition & 1 deletion protocols/horizon/main.go
Expand Up @@ -518,7 +518,7 @@ type Transaction struct {
OperationCount int32 `json:"operation_count"`
EnvelopeXdr string `json:"envelope_xdr"`
ResultXdr string `json:"result_xdr"`
ResultMetaXdr *string `json:"result_meta_xdr"`
ResultMetaXdr string `json:"result_meta_xdr,omitempty"`
FeeMetaXdr string `json:"fee_meta_xdr"`
MemoType string `json:"memo_type"`
MemoBytes string `json:"memo_bytes,omitempty"`
Expand Down
2 changes: 1 addition & 1 deletion services/horizon/CHANGELOG.md
Expand Up @@ -6,7 +6,7 @@ file. This project adheres to [Semantic Versioning](http://semver.org/).
## Unreleased

### Breaking Changes
- The Horizon API Transaction resource field `result_meta_xdr` is now nullable and Horizon API will set it to `null` when Horizon has been configured with `SKIP_TXMETA=true`, otherwise if Horizon is configured with `SKIP_TXMETA=false` which is default, then the API Transaction field `result_meta_xdr` will remain as-is, being the base64 encoded xdr [5228](https://github.com/stellar/go/pull/5228).
- The Horizon API Transaction resource field in json `result_meta_xdr` is now optional and Horizon API will not emit the field when Horizon has been configured with `SKIP_TXMETA=true`, effectively null, otherwise if Horizon is configured with `SKIP_TXMETA=false` which is default, then the API Transaction field `result_meta_xdr` will remain present and populated with base64 encoded xdr [5228](https://github.com/stellar/go/pull/5228).

## 2.28.3

Expand Down
2 changes: 1 addition & 1 deletion services/horizon/internal/actions/transaction_test.go
Expand Up @@ -144,7 +144,7 @@ func checkOuterHashResponse(
tt.Assert.Equal(fixture.Transaction.TransactionHash, transactionResponse.Hash)
tt.Assert.Equal(fixture.Transaction.TxEnvelope, transactionResponse.EnvelopeXdr)
tt.Assert.Equal(fixture.Transaction.TxFeeMeta, transactionResponse.FeeMetaXdr)
tt.Assert.Equal(fixture.Transaction.TxMeta, *transactionResponse.ResultMetaXdr)
tt.Assert.Equal(fixture.Transaction.TxMeta, transactionResponse.ResultMetaXdr)
tt.Assert.Equal(fixture.Transaction.TxResult, transactionResponse.ResultXdr)
}

Expand Down
4 changes: 2 additions & 2 deletions services/horizon/internal/actions_transaction_test.go
Expand Up @@ -378,7 +378,7 @@ func TestPostFeeBumpTransaction(t *testing.T) {
ht.Assert.NoError(err)

ht.Assert.Equal(fixture.Transaction.TxResult, response.ResultXdr)
ht.Assert.Equal(fixture.Transaction.TxMeta, *response.ResultMetaXdr)
ht.Assert.Equal(fixture.Transaction.TxMeta, response.ResultMetaXdr)
ht.Assert.Equal(fixture.Transaction.TransactionHash, response.Hash)
ht.Assert.Equal(fixture.Transaction.TxEnvelope, response.EnvelopeXdr)
ht.Assert.Equal(fixture.Transaction.LedgerSequence, response.Ledger)
Expand All @@ -392,7 +392,7 @@ func TestPostFeeBumpTransaction(t *testing.T) {
ht.Assert.NoError(err)

ht.Assert.Equal(fixture.Transaction.TxResult, response.ResultXdr)
ht.Assert.Equal(fixture.Transaction.TxMeta, *response.ResultMetaXdr)
ht.Assert.Equal(fixture.Transaction.TxMeta, response.ResultMetaXdr)
ht.Assert.Equal(fixture.InnerHash, response.Hash)
ht.Assert.Equal(fixture.Transaction.TxEnvelope, response.EnvelopeXdr)
ht.Assert.Equal(fixture.Transaction.LedgerSequence, response.Ledger)
Expand Down
Expand Up @@ -213,7 +213,7 @@ func TestContractInvokeHostFunctionInvokeStatelessContractFn(t *testing.T) {
invokeResult := xdr.Uint64(9)
expectedScVal := xdr.ScVal{Type: xdr.ScValTypeScvU64, U64: &invokeResult}
var transactionMeta xdr.TransactionMeta
assert.NoError(t, xdr.SafeUnmarshalBase64(*tx.ResultMetaXdr, &transactionMeta))
assert.NoError(t, xdr.SafeUnmarshalBase64(tx.ResultMetaXdr, &transactionMeta))
assert.True(t, expectedScVal.Equals(transactionMeta.V3.SorobanMeta.ReturnValue))

clientInvokeOp, err := itest.Client().Operations(horizonclient.OperationRequest{
Expand Down Expand Up @@ -309,7 +309,7 @@ func TestContractInvokeHostFunctionInvokeStatefulContractFn(t *testing.T) {
invokeResult := xdr.Uint32(1)
expectedScVal := xdr.ScVal{Type: xdr.ScValTypeScvU32, U32: &invokeResult}
var transactionMeta xdr.TransactionMeta
assert.NoError(t, xdr.SafeUnmarshalBase64(*clientTx.ResultMetaXdr, &transactionMeta))
assert.NoError(t, xdr.SafeUnmarshalBase64(clientTx.ResultMetaXdr, &transactionMeta))
assert.True(t, expectedScVal.Equals(transactionMeta.V3.SorobanMeta.ReturnValue))

clientInvokeOp, err := itest.Client().Operations(horizonclient.OperationRequest{
Expand Down
2 changes: 1 addition & 1 deletion services/horizon/internal/integration/sac_test.go
Expand Up @@ -1401,7 +1401,7 @@ func assertInvokeHostFnSucceeds(itest *integration.Test, signer *keypair.Full, o
require.NoError(itest.CurrentTest(), err)

var txMetaResult xdr.TransactionMeta
err = xdr.SafeUnmarshalBase64(*clientTx.ResultMetaXdr, &txMetaResult)
err = xdr.SafeUnmarshalBase64(clientTx.ResultMetaXdr, &txMetaResult)
require.NoError(itest.CurrentTest(), err)

opResults, ok := txResult.OperationResults()
Expand Down
8 changes: 4 additions & 4 deletions services/horizon/internal/integration/transaction_test.go
Expand Up @@ -33,7 +33,7 @@ func TestP19MetaTransaction(t *testing.T) {
clientTx := itest.MustSubmitOperations(&masterAccount, itest.Master(), op)

var txMetaResult xdr.TransactionMeta
err = xdr.SafeUnmarshalBase64(*clientTx.ResultMetaXdr, &txMetaResult)
err = xdr.SafeUnmarshalBase64(clientTx.ResultMetaXdr, &txMetaResult)
require.NoError(t, err)

assert.Greater(t, len(txMetaResult.MustV2().Operations), 0)
Expand Down Expand Up @@ -63,7 +63,7 @@ func TestP19MetaDisabledTransaction(t *testing.T) {

clientTx := itest.MustSubmitOperations(&masterAccount, itest.Master(), op)

assert.Nil(t, clientTx.ResultMetaXdr)
assert.Empty(t, clientTx.ResultMetaXdr)
}

func TestP20MetaTransaction(t *testing.T) {
Expand All @@ -87,7 +87,7 @@ func TestP20MetaTransaction(t *testing.T) {
clientTx := itest.MustSubmitOperationsWithFee(&sourceAccount, itest.Master(), minFee+txnbuild.MinBaseFee, &preFlightOp)

var txMetaResult xdr.TransactionMeta
err = xdr.SafeUnmarshalBase64(*clientTx.ResultMetaXdr, &txMetaResult)
err = xdr.SafeUnmarshalBase64(clientTx.ResultMetaXdr, &txMetaResult)
require.NoError(t, err)

assert.Greater(t, len(txMetaResult.MustV3().Operations), 0)
Expand Down Expand Up @@ -117,5 +117,5 @@ func TestP20MetaDisabledTransaction(t *testing.T) {
preFlightOp, minFee := itest.PreflightHostFunctions(&sourceAccount, *installContractOp)
clientTx := itest.MustSubmitOperationsWithFee(&sourceAccount, itest.Master(), minFee+txnbuild.MinBaseFee, &preFlightOp)

assert.Nil(t, clientTx.ResultMetaXdr)
assert.Empty(t, clientTx.ResultMetaXdr)
}
Expand Up @@ -98,7 +98,7 @@ func TestPopulateOperation_WithTransaction(t *testing.T) {
assert.True(t, dest.Transaction.Successful)
assert.Equal(t, int64(100), dest.Transaction.FeeCharged)
assert.Equal(t, int64(10000), dest.Transaction.MaxFee)
assert.Nil(t, dest.Transaction.ResultMetaXdr)
assert.Empty(t, dest.Transaction.ResultMetaXdr)
}

func TestPopulateOperation_AllowTrust(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions services/horizon/internal/resourceadapter/transaction.go
Expand Up @@ -45,9 +45,9 @@ func PopulateTransaction(
dest.EnvelopeXdr = row.TxEnvelope
dest.ResultXdr = row.TxResult
if skipTxMeta {
dest.ResultMetaXdr = nil
dest.ResultMetaXdr = ""
} else {
dest.ResultMetaXdr = &row.TxMeta
dest.ResultMetaXdr = row.TxMeta
}
dest.FeeMetaXdr = row.TxFeeMeta
dest.MemoType = row.MemoType
Expand Down
29 changes: 19 additions & 10 deletions services/horizon/internal/resourceadapter/transaction_test.go
Expand Up @@ -41,12 +41,13 @@ func TestPopulateTransaction_Successful(t *testing.T) {
row = history.Transaction{
TransactionWithoutLedger: history.TransactionWithoutLedger{
Successful: false,
TxMeta: "xyz",
},
}

assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, false))
assert.False(t, dest.Successful)
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
}

func TestPopulateTransactionWhenSkipMeta(t *testing.T) {
Expand All @@ -66,7 +67,7 @@ func TestPopulateTransactionWhenSkipMeta(t *testing.T) {

assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, true))
assert.True(t, dest.Successful)
assert.Nil(t, dest.ResultMetaXdr)
assert.Empty(t, dest.ResultMetaXdr)
}

func TestPopulateTransaction_HashMemo(t *testing.T) {
Expand All @@ -76,13 +77,14 @@ func TestPopulateTransaction_HashMemo(t *testing.T) {
TransactionWithoutLedger: history.TransactionWithoutLedger{
MemoType: "hash",
Memo: null.StringFrom("abcdef"),
TxMeta: "xyz",
},
}
assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, false))
assert.Equal(t, "hash", dest.MemoType)
assert.Equal(t, "abcdef", dest.Memo)
assert.Equal(t, "", dest.MemoBytes)
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
}

func TestPopulateTransaction_TextMemo(t *testing.T) {
Expand Down Expand Up @@ -144,6 +146,7 @@ func TestPopulateTransaction_TextMemo(t *testing.T) {
MemoType: "text",
TxEnvelope: envelopeXDR,
Memo: null.StringFrom("sample"),
TxMeta: "xyz",
},
}

Expand All @@ -153,7 +156,7 @@ func TestPopulateTransaction_TextMemo(t *testing.T) {
assert.Equal(t, "text", dest.MemoType)
assert.Equal(t, "sample", dest.Memo)
assert.Equal(t, base64.StdEncoding.EncodeToString(rawMemo), dest.MemoBytes)
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
}
}

Expand All @@ -171,13 +174,14 @@ func TestPopulateTransaction_Fee(t *testing.T) {
TransactionWithoutLedger: history.TransactionWithoutLedger{
MaxFee: 10000,
FeeCharged: 100,
TxMeta: "xyz",
},
}

assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, false))
assert.Equal(t, int64(100), dest.FeeCharged)
assert.Equal(t, int64(10000), dest.MaxFee)
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
}

// TestPopulateTransaction_Preconditions tests transaction object population.
Expand Down Expand Up @@ -212,11 +216,12 @@ func TestPopulateTransaction_Preconditions(t *testing.T) {
MinAccountSequenceAge: null.StringFrom(fmt.Sprint(minSequenceAge)),
MinAccountSequenceLedgerGap: null.IntFrom(int64(minSequenceLedgerGap)),
ExtraSigners: pq.StringArray{"D34DB33F", "8BADF00D"},
TxMeta: "xyz",
},
}

assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, false))
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
p := dest.Preconditions
assert.Equal(t, validAfter.Format(time.RFC3339), dest.ValidAfter)
assert.Equal(t, validBefore.Format(time.RFC3339), dest.ValidBefore)
Expand Down Expand Up @@ -307,12 +312,13 @@ func TestPopulateTransaction_PreconditionsV2(t *testing.T) {
Upper: null.IntFrom(int64(envelopeTimebounds.MaxTime)),
},
TxEnvelope: envelopeXDR,
TxMeta: "xyz",
},
}

var dest Transaction
assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, false))
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)

gotTimebounds := dest.Preconditions.TimeBounds
assert.Equal(t, "5", gotTimebounds.MinTime)
Expand Down Expand Up @@ -351,6 +357,7 @@ func TestPopulateTransaction_PreconditionsV2_Omissions(t *testing.T) {
MinAccountSequence: null.IntFromPtr(nil),
MinAccountSequenceAge: null.StringFrom("0"),
ExtraSigners: pq.StringArray{},
TxMeta: "xyz",
}, {
AccountSequence: 1,
MinAccountSequenceLedgerGap: null.IntFrom(0),
Expand All @@ -359,6 +366,7 @@ func TestPopulateTransaction_PreconditionsV2_Omissions(t *testing.T) {
MinAccountSequence: null.IntFromPtr(nil),
MinAccountSequenceAge: null.StringFromPtr(nil),
ExtraSigners: nil,
TxMeta: "xyz",
},
} {
dest, js := jsonifyTx(tx)
Expand All @@ -380,7 +388,7 @@ func TestPopulateTransaction_PreconditionsV2_Omissions(t *testing.T) {
// exist entirely.
tx.MinAccountSequenceLedgerGap = null.IntFromPtr(nil)
dest, js = jsonifyTx(tx)
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
tt.NotContains(js, "preconditions")
}
}
Expand All @@ -402,11 +410,12 @@ func TestFeeBumpTransaction(t *testing.T) {
InnerTransactionHash: null.StringFrom("2374e99349b9ef7dba9a5db3339b78fda8f34777b1af33ba468ad5c0df946d4d"),
Signatures: []string{"a", "b", "c"},
InnerSignatures: []string{"d", "e", "f"},
TxMeta: "xyz",
},
}

assert.NoError(t, PopulateTransaction(ctx, row.TransactionHash, &dest, row, false))
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
assert.Equal(t, row.TransactionHash, dest.Hash)
assert.Equal(t, row.TransactionHash, dest.ID)
assert.Equal(t, row.FeeAccount.String, dest.FeeAccount)
Expand All @@ -426,7 +435,7 @@ func TestFeeBumpTransaction(t *testing.T) {
assert.Equal(t, "/transactions/"+row.TransactionHash, dest.Links.Transaction.Href)

assert.NoError(t, PopulateTransaction(ctx, row.InnerTransactionHash.String, &dest, row, false))
assert.NotNil(t, dest.ResultMetaXdr)
assert.NotEmpty(t, dest.ResultMetaXdr)
assert.Equal(t, row.InnerTransactionHash.String, dest.Hash)
assert.Equal(t, row.InnerTransactionHash.String, dest.ID)
assert.Equal(t, row.FeeAccount.String, dest.FeeAccount)
Expand Down

0 comments on commit 325d0ba

Please sign in to comment.