From 325d0ba356903153f9e8e2cea874183ac2529e99 Mon Sep 17 00:00:00 2001 From: Shawn Reuland Date: Tue, 5 Mar 2024 19:38:05 -0800 Subject: [PATCH] #5221: use empty string for result_meta_xdr and omitempty on json mapping, so field is absent from json --- clients/horizonclient/main_test.go | 32 +++++++++++++++++-- protocols/horizon/main.go | 2 +- services/horizon/CHANGELOG.md | 2 +- .../internal/actions/transaction_test.go | 2 +- .../internal/actions_transaction_test.go | 4 +-- .../integration/invokehostfunction_test.go | 4 +-- .../horizon/internal/integration/sac_test.go | 2 +- .../internal/integration/transaction_test.go | 8 ++--- .../resourceadapter/operations_test.go | 2 +- .../internal/resourceadapter/transaction.go | 4 +-- .../resourceadapter/transaction_test.go | 29 +++++++++++------ 11 files changed, 63 insertions(+), 28 deletions(-) diff --git a/clients/horizonclient/main_test.go b/clients/horizonclient/main_test.go index c6d8927470..27677cc36c 100644 --- a/clients/horizonclient/main_test.go +++ b/clients/horizonclient/main_test.go @@ -3,6 +3,7 @@ package horizonclient import ( "fmt" "net/http" + "strings" "testing" "time" @@ -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==`) } } @@ -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, "", "", 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", @@ -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: AAAAAQAAAAIAAAADAAavdgAAAAAAAAAAtoYrQZHbnPLAFsF4YB88J5VSg0/piQNHm0SL9l0HW1EAAAAXSHbnnAAGr3UAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAavdgAAAAAAAAAAtoYrQZHbnPLAFsF4YB88J5VSg0/piQNHm0SL9l0HW1EAAAAXSHbnnAAGr3UAAAABAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAMABq9zAAAAAAAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAUQ/z+cAABeBgAASuQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAADMSEvcRKXsaUNna++Hy7gWm/CfqTjEA7xoGypfrFGUHAAAAAcXjracAABeBgAASuQAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAMABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIduecAAavdQAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABVB53CcAAavdQAAAAEAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", 1)) record, err := client.TransactionDetail(txHash) if assert.NoError(t, err) { @@ -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, "", "", 1)) + + record, err = client.TransactionDetail(txHash) + if assert.NoError(t, err) { + assert.Empty(t, record.ResultMetaXdr) + } } func TestOrderBookRequest(t *testing.T) { @@ -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": "", "fee_meta_xdr": "AAAAAgAAAAMABq91AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIdugAAAavdQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAEABq92AAAAAAAAAAC2hitBkduc8sAWwXhgHzwnlVKDT+mJA0ebRIv2XQdbUQAAABdIduecAAavdQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA==", "memo_type": "text", "signatures": [ diff --git a/protocols/horizon/main.go b/protocols/horizon/main.go index a2dc25b208..bdec98ba0b 100644 --- a/protocols/horizon/main.go +++ b/protocols/horizon/main.go @@ -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"` diff --git a/services/horizon/CHANGELOG.md b/services/horizon/CHANGELOG.md index ac6099640d..c34ea375e8 100644 --- a/services/horizon/CHANGELOG.md +++ b/services/horizon/CHANGELOG.md @@ -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 diff --git a/services/horizon/internal/actions/transaction_test.go b/services/horizon/internal/actions/transaction_test.go index 080375cee0..b76cf1b0bf 100644 --- a/services/horizon/internal/actions/transaction_test.go +++ b/services/horizon/internal/actions/transaction_test.go @@ -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) } diff --git a/services/horizon/internal/actions_transaction_test.go b/services/horizon/internal/actions_transaction_test.go index f2310616e9..940426b947 100644 --- a/services/horizon/internal/actions_transaction_test.go +++ b/services/horizon/internal/actions_transaction_test.go @@ -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) @@ -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) diff --git a/services/horizon/internal/integration/invokehostfunction_test.go b/services/horizon/internal/integration/invokehostfunction_test.go index 5d01ba8517..275f0de23b 100644 --- a/services/horizon/internal/integration/invokehostfunction_test.go +++ b/services/horizon/internal/integration/invokehostfunction_test.go @@ -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{ @@ -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{ diff --git a/services/horizon/internal/integration/sac_test.go b/services/horizon/internal/integration/sac_test.go index 2294169ba5..64c772b44c 100644 --- a/services/horizon/internal/integration/sac_test.go +++ b/services/horizon/internal/integration/sac_test.go @@ -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() diff --git a/services/horizon/internal/integration/transaction_test.go b/services/horizon/internal/integration/transaction_test.go index 005d1cf5f1..a0db5816dd 100644 --- a/services/horizon/internal/integration/transaction_test.go +++ b/services/horizon/internal/integration/transaction_test.go @@ -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) @@ -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) { @@ -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) @@ -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) } diff --git a/services/horizon/internal/resourceadapter/operations_test.go b/services/horizon/internal/resourceadapter/operations_test.go index fef0a79944..f6acfa664b 100644 --- a/services/horizon/internal/resourceadapter/operations_test.go +++ b/services/horizon/internal/resourceadapter/operations_test.go @@ -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) { diff --git a/services/horizon/internal/resourceadapter/transaction.go b/services/horizon/internal/resourceadapter/transaction.go index 3f294461ee..f458830c2d 100644 --- a/services/horizon/internal/resourceadapter/transaction.go +++ b/services/horizon/internal/resourceadapter/transaction.go @@ -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 diff --git a/services/horizon/internal/resourceadapter/transaction_test.go b/services/horizon/internal/resourceadapter/transaction_test.go index 0eb24aa9f4..694fc885fb 100644 --- a/services/horizon/internal/resourceadapter/transaction_test.go +++ b/services/horizon/internal/resourceadapter/transaction_test.go @@ -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) { @@ -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) { @@ -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) { @@ -144,6 +146,7 @@ func TestPopulateTransaction_TextMemo(t *testing.T) { MemoType: "text", TxEnvelope: envelopeXDR, Memo: null.StringFrom("sample"), + TxMeta: "xyz", }, } @@ -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) } } @@ -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. @@ -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) @@ -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) @@ -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), @@ -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) @@ -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") } } @@ -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) @@ -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)